01迷宮
問題描述
有乙個僅由數字0與1組成的n×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。
你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多少個格仔(包含自身)。
分析
bfs,對於每個連通的格仔答案都是一樣的,所以記錄一下就不會超時。
時間複雜度
o(n)
**
const
maxn=1000;
dx:array[1..4] of integer=(-1,0,1,0);
dy:array[1..4] of integer=(0,1,0,-1);
varans,f,a:array[0..maxn,0..maxn] of longint;
s:array[0..1000000,1..3] of longint;
st:ansistring;
i,j,n,m,qx,qy:longint;
function check(x,y:longint):boolean;
begin
check:=true;
if (x<1) or (x>n) or (y<1) or (y>n) then exit(false);
end;
procedure bfs(qx,qy:longint);
vari,zx,zy,h,t:longint;
begin
s[1,1]:=qx;s[1,2]:=qy;
ans[qx,qy]:=1;
h:=0;t:=1;
while ha[s[h,1],s[h,2]]) then
begin
inc(t);
s[t,1]:=zx;
s[t,2]:=zy;
ans[zx,zy]:=1;
end;
end;
end;
for i:=1 to t do
ans[s[i,1],s[i,2]]:=t;
end;
begin
readln(n,m);
for i:=1 to n do
begin
readln(st);
for j:=1 to n do
a[i,j]:=ord(st[j])-48;
end;
for i:=1 to n do
for j:=1 to n do
if ans[i,j]=0 then bfs(i,j);
for i:=1 to m do
begin
readln(qx,qy);
writeln(ans[qx,qy]);
end;
end.
洛谷 P1141 01迷宮
題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...
洛谷P1141 01迷宮
include using namespace std struct node a 1000001 char map 1001 1001 map是地圖 int n,m,startx,starty,num,book 1001 1001 mark 1001 1001 ans 1000001 book用來...
洛谷P1141 01迷宮
題目鏈結 題目描述 有乙個僅由數字 0 0 與1 role presentation 1 1組成的n n n n 格迷宮。若你位於一格 0 0 上,那麼你可以移動到相鄰 4 role presentation 4 4格中的某一格 1 1 上,同樣若你位於一格 1 role presentation ...