題目描述
由數字0 組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如:6x6的方陣(n=6),塗色前和塗色後的方陣如下:00
0000
0000
0000
1111
0011
1101
1001
0112
2111
0001
1122
2110
0001
1222
2111
1111
1111
11輸入輸出格式
輸入格式:
每組測試資料第一行乙個整數:n。其中n(1
<=n<=30)
接下來n行,由0和1組成的nxn的方陣。
方陣內只有乙個閉合圈,圈內至少有乙個0。
//感謝黃小u飲品指出本題資料和資料格式不一樣. 已修改(輸入格式)
輸出格式:
已經填好數字2的完整方陣。
輸入輸出樣例
輸入樣例#1:60
0000
0001
1110
1100
1110
0011
0000
1111
111輸出樣例#1:00
0000
0011
1101
1221
1122
2112
2221
1111
11題解:這道題用廣搜,先是從四條邊開始碰到0就向四個方向拓展,拓展到乙個不為1的點就可以把這個點入隊,然後輸出處理一下就行了。
const
maxn=30;
dx:array[1..4] of longint=(-1,0,1,0);
dy:array[1..4] of longint=(0,1,0,-1);
var a:array[0..maxn,0..maxn] of longint;
b:array[0..10000,1..3] of longint;
i,j,n:longint;
function
check
(x,y:longint):boolean;
begin
check:=true;
if (x<1) or (x>n) or (y<1) or (y>n) or (a[x,y]<>0) then
exit(false);
end;
procedure
dfs(qx,qy:longint);
var i,h,t,zx,zy:longint;
begin
b[1,1]:=qx;b[1,2]:=qy;
b[1,3]:=maxlongint;
h:=0;t:=1;
while hdo
begin
inc(h);
for i:=1to4
dobegin
zx:=b[h,1]+dx[i];
zy:=b[h,2]+dy[i];
if check(zx,zy) then
begin
inc(t);
b[t,1]:=zx;
b[t,2]:=zy;
a[zx,zy]:=maxlongint;
end;
end;
end;
end;
begin
readln(n);
for i:=1
to n do
for j:=1
to n do
read(a[i,j]);
for i:=1
to n do
begin
if a[1,i]=0
then dfs(1,i);
if a[i,1]=0
then dfs(i,1);
if a[n,i]=0
then dfs(n,i);
if a[i,n]=0
then dfs(i,n);
end;
for i:=1
to n do
begin
for j:=1
to n do
if a[i,j]=maxlongint
then
write(0,' ')
else
if a[i,j]=0
then
write(2,' ') else
write(a[i,j],' ');
writeln;
end;
end.
洛谷 1162 填塗顏色 BFS
洛谷1162題目鏈結 由數字0和1組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 塗色前 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 ...
洛谷P1162 填塗顏色
由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...
填塗顏色 洛谷P1162
由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...