题目:
给定N(小于等于8)个点的地图,以及地图上各点的相邻关系,请输出用4种颜色将地图涂色的所有方案数(要求相邻两点不能涂成相同的颜色)
数据中0代表不相邻,1代表相邻
分析:好老的题目,基础dfs即可
代码:
const
maxn=10;
var
a:array [1..maxn] of longint;
flag:array [1..maxn,1..maxn] of boolean;
n,temp,total:longint;
procedure init;
var
i,j:longint;
begin
readln(n);
for i:=1 to n do
for j:=1 to n do
begin
read(temp);
if temp=1 then
flag[i,j]:=true
else
flag[i,j]:=false;
end;
end;
procedure dfs(dep:longint);
var
i,j:longint;
begin
if dep>n then
begin
inc(total);
exit;
end;
for i:=1 to 4 do
begin
temp:=0;
for j:=1 to n do
if (j<>dep) and flag[dep,j] and (a[j]=i) then
temp:=1;
if temp=1 then
continue;
a[dep]:=i;
dfs(dep+1);
end;
a[dep]:=0;
end;
begin
init;
dfs(1);
write(total);
end.