谁有四色问题的验证程序?最好有源代码。

解决方案 »

  1.   

    呵呵!好经典的问题啊!你想要验证的小程序还可以,完全验证我可做不来哦!把地图的一个区域作为一个结点,用边连接相邻区域对应的结点得到一个图。四种颜色作图就是把图的结
    点分为四个集合。所谓要相邻区域的颜色不同,就是集合中的结点要互不相邻。范例如下(Delphi下只要稍稍改动即可):Program fourcolor_c;
    var
    graph:array[1..150] of string[150];
    n:byte;procedure input;
    var 
    i:byte;
    p:byte;
     begin
     write('n=');readln(n);
     for i:=1 to n do
       begin
         write(i,':');
         graph[i]:='';
         repeat
           read(p);
           graph[i]:=graph[i]+chr(p)
         until eoln;
       end;
    end;procedure color(x:string;k:byte);
    var w,i,n:byte;
    begin
      for w:=1 to 4 do
        begin
          p:=1;
          while(p<=length(graph[k]))and((ord(graph[k,p])>=k)or(w+48<>ord(x[ord(graph[k,p])]))) do
          p:=p+1;
      if p>length(grapj[k]) then
        if k<n
          then color(x+chr(w+48),k+1)
          else
            begin
              for i:=1 to n-1 do
               write(i:3,'-',x[i]);
               writeln(n:3,'-',w);
            end;
         end;
       end;
    begin
    input;
    color('',1)
    end.应用例子如下:
    一张地图被分为8块区域,那么我们假设代号分别为1,2,3,4,5,6,7,8. 则上面代码中的n=8.
    对于每个区域凡是与其相连的其他区域对应关系可以确定。
    如我们假设,1号地区与2,3,4,5,6,7,8都相连;则可以表示为 1:2 3 4 5 6 7 8
    同理 2:1 3 8  则表示2号地区与1,3,8相连;一次类推。
    一旦上述条件输入计算机程序,上面的程序马上会给出所有符合条件的求解!