发布网友 发布时间:2024-10-23 21:35
共3个回答
热心网友 时间:2024-10-25 08:47
其实思路很简单,深搜就好了,
procere search(n【第几个】:longint);
begin
if n=国家数 then for i:=1 to 4 do if b[n,i]=false then begin 答案+1;break;end;//搜完了就退出
for i:=1 to 4 do
if b[n,i]=false then
begin
for j:=相邻的国家 do
b[j,i]:=true;//第n国的邻国不能染i
search(n+1);//搜下一个
for j:=相邻的国家 do
b[j,i]:=false;//回溯
end;
end;
这只是思路框架,程序就自己完成吧!
热心网友 时间:2024-10-25 08:48
var n,i,j,ans:longint; a:array[1..20] of longint; v:array[1..20,1..20] of longint;procere search(i:longint);var j,k:longint; flag:boolean;begin if i=n+1 then begin inc(ans); exit; end; for j:=1 to 4 do begin flag:=true; for k:=1 to i do if (v[i,k]=1)and(j=a[k]) then flag:=false; if flag then begin a[i]:=j; search(i+1); end; end;end;begin readln(n); for i:=1 to n do begin for j:=1 to n do read(v[i,j]); readln; end; ans:=0; search(1); writeln(ans);end.
换行自己换,有人*我关电脑了
热心网友 时间:2024-10-25 08:48
我有一题,和你的很像,但输入不同,所以对不起
热心网友 时间:2024-10-25 08:47
其实思路很简单,深搜就好了,
procere search(n【第几个】:longint);
begin
if n=国家数 then for i:=1 to 4 do if b[n,i]=false then begin 答案+1;break;end;//搜完了就退出
for i:=1 to 4 do
if b[n,i]=false then
begin
for j:=相邻的国家 do
b[j,i]:=true;//第n国的邻国不能染i
search(n+1);//搜下一个
for j:=相邻的国家 do
b[j,i]:=false;//回溯
end;
end;
这只是思路框架,程序就自己完成吧!
热心网友 时间:2024-10-25 08:48
var n,i,j,ans:longint; a:array[1..20] of longint; v:array[1..20,1..20] of longint;procere search(i:longint);var j,k:longint; flag:boolean;begin if i=n+1 then begin inc(ans); exit; end; for j:=1 to 4 do begin flag:=true; for k:=1 to i do if (v[i,k]=1)and(j=a[k]) then flag:=false; if flag then begin a[i]:=j; search(i+1); end; end;end;begin readln(n); for i:=1 to n do begin for j:=1 to n do read(v[i,j]); readln; end; ans:=0; search(1); writeln(ans);end.
换行自己换,有人*我关电脑了
热心网友 时间:2024-10-25 08:48
我有一题,和你的很像,但输入不同,所以对不起