P1141 01迷宮(C BFS 聯通塊)

2021-10-02 09:00:16 字數 1158 閱讀 6979

有乙個僅由數字0與1組成的n×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。

你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多少個格仔(包含自身)。

第1行為兩個正整數n,m。

下面n行,每行n個字元,字元只可能是0或者1,字元之間沒有空格。

接下來m行,每行2個用空格分隔的正整數i,j,對應了迷宮中第i行第j列的乙個格仔,詢問從這一格開始能移動到多少格。

m行,對於每個詢問輸出相應答案。

輸入 #1

2 201

101 1

2 2輸出 #144

所有格仔互相可達。

對於20%的資料,n≤10;

對於40%的資料,n≤50;

對於50%的資料,m≤5;

對於60%的資料,n≤100,m≤100;

對於100%的資料,n≤1000,m≤100000。

剛開始寫了個普通的bfs,結果有三個點wa了,後來加入聯通塊的思想後就ok咯。

#include

using

namespace std;

int n, m, num[

100000];

int s[

1000][

1000];

//迷宮

int ss[

1000][

1000]=

;//標記

int x[4]

=;int y[4]

=;class

node

dir[

100000];

queue ssr;

void

bfs()}

ssr.

pop();

} num[i]

= max;

//記錄}}

}int

main()

for(

int i =

0; i < m; i++

)//錄入座標

bfs();

for(

int i=

0;i) cout << num[i]

<< endl;

return0;

}

洛谷 P1141 01迷宮

題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...

洛谷P1141 01迷宮

01迷宮 問題描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 分析 bfs,對於每個連通的格仔答案都是一樣的...

洛谷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用來...