Codevs P1116 四色問題

2021-07-05 17:59:34 字數 2136 閱讀 3992

給定n(小於等於8)個點的地圖,以及地圖上各點的相鄰關係,請輸出用4種顏色將地圖塗色的所有方案數(要求相鄰兩點不能塗成相同的顏色)

資料中0代表不相鄰,1代表相鄰

第一行乙個整數n,代表地圖上有n個點

接下來n行,每行n個整數,每個整數是0或者1。第i行第j列的值代表了第i個點和第j個點之間是相鄰的還是不相鄰,相鄰就是1,不相鄰就是0.

我們保證a[i][j] = a[j][i] (a[i,j] = a[j,i])

染色的方案數

樣例輸入 sample input

8 0 0 0 1 0 0 1 0

0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 1 0 0 0 0 0 0

1 0 1 0 0 0 0 0

0 1 0 0 0 0 0 0

樣例輸出 sample output

15552

資料範圍及提示 data size & hint

n<=8

該題為深度搜尋題目,只要連好邊即可。、

program p1116;

type point=^rec;

rec=record

e:integer;

s:point;

end;

var n,x,i,j:integer;

ans:longint;

vertex:array[1..8] of point;

colour:array[1..8] of

0..4;

procedure

insert

(s,e:integer);

var p:point;

begin

new(p);

p^.e:=e;

p^.s:=vertex[s];

vertex[s]:=p;

end;

function

check

(x,k:integer):boolean;

var p:point;

begin

p:=vertex[x];

while p<>nil

dobegin

if colour[p^.e]=k

then

exit(false);

p:=p^.s;

end;

exit(true);

end;

procedure

dfs(step:integer);

var k:integer;

begin

for k:=1to4

dobegin

if check(step,k)

then

begin

colour[step]:=k;

ifstep

then

dfs(step+1);

ifstep=n then ans:=ans+1;

colour[step]:=0;

end;

end;

end;

begin

readln(n);

for i:=1

to n do

for j:=1

to n do

begin

read(x);

if x=1

then

begin

insert(i,j);

end;

end;

for i:=1

to n do colour[i]:=0;

ans:=0;

dfs(1);

write(ans);

end.

測試通過 accepted

總耗時: 3 ms

0 / 0 資料通過測試.

執行結果

測試點#dt.in 結果:ac 記憶體使用量: 256kb 時間使用量: 1ms

測試點#dt1.in 結果:ac 記憶體使用量: 256kb 時間使用量: 1ms

測試點#dt2.in 結果:ac 記憶體使用量: 256kb 時間使用量: 1ms

1116 四色問題

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 description 給定n 小於等於8 個點的地圖,以及地圖上各點的相鄰關係,請輸出用4種顏色將地圖塗色的所有方案數 要求相鄰兩點不能塗成相同的顏色 資料中0代表不相鄰,1代表相鄰 輸入描述 input descripti...

codevs黃金 1116 四色問題

題目描述 description 給定n 小於等於8 個點的地圖,以及地圖上各點的相鄰關係,請輸出用4種顏色將地圖塗色的所有方案數 要求相鄰兩點不能塗成相同的顏色 資料中0代表不相鄰,1代表相鄰 輸入描述 input description 第一行乙個整數n,代表地圖上有n個點 接下來n行,每行n個...

codevs 1116 四色問題

題目描述 description 給定n 小於等於8 個點的地圖,以及地圖上各點的相鄰關係,請輸出用4種顏色將地圖塗色的所有方案數 要求相鄰兩點不能塗成相同的顏色 資料中0代表不相鄰,1代表相鄰 輸入描述 input description 第一行乙個整數n,代表地圖上有n個點 接下來n行,每行n個...