呵呵!好经典的问题啊!你想要验证的小程序还可以,完全验证我可做不来哦!把地图的一个区域作为一个结点,用边连接相邻区域对应的结点得到一个图。四种颜色作图就是把图的结 点分为四个集合。所谓要相邻区域的颜色不同,就是集合中的结点要互不相邻。范例如下(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相连;一次类推。 一旦上述条件输入计算机程序,上面的程序马上会给出所有符合条件的求解!
点分为四个集合。所谓要相邻区域的颜色不同,就是集合中的结点要互不相邻。范例如下(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相连;一次类推。
一旦上述条件输入计算机程序,上面的程序马上会给出所有符合条件的求解!