洛谷P1141 01迷宮

2021-07-26 07:27:46 字數 1509 閱讀 3234

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 ...