洛谷OJ P1141 01迷宮 解題報告

2022-09-04 13:15:14 字數 2153 閱讀 1342

by medalplus

【題目描述】

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

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

【輸入描述】

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

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

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

【輸出描述】

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

【分析】

此題比較坑爹

題目的意思就是求對於乙個點所在的聯通塊的個數

然後筆者想到了並查集和tarjan

結果看了下範圍n<=1000,m<=100000,然後就放棄了。。。

仔細想想其實就是個bfs

然後發現時間複雜度是o(n2m)

然後還是tle,就要考慮優化了

我們發現,對於乙個點所拓展的路徑上的所有點能走的格仔數是一樣的!

那麼也就是說,我們可以預處理出整個圖

這讓我們聯想到flood_fill

然後筆者就採用了dfs的方式

然後就爆棧了,發現對於1000*1000的完全圖(全都是1或0)會達到106層,所以必定會爆

這個時候可以考慮採用bfs的方式flood_fill

然後就tle了,筆者發現主要拖慢時間的是採取了stl的佇列

特別特別的耗時間,然後就手寫個佇列,再加卡常數的讀入

就ac了。。。。

有點淡淡的憂傷

【**】

1 #include 2 #include 3 #include 4

using

namespace

std;56

#define rep(i,l,r) for(i=l;i<=r;i++)

7#define read scanf

8#define print printf910

const

int maxn=1001;11

const

int maxm=10000001;12

13struct

xoy;

1617

char

graph[maxn][maxn];

18int

record[maxm],id[maxn][maxn];

19xoy q[maxm];

20int

front,tail;

21int n,m;//

size of the board ; question numbers

22int

datax,datay;

2324

void bfs(int x,int y,int

index);

28xoy head;

29while(front!=tail);

37if(head.y-1>=1 && graph[head.x][head.y-1]!=graph[head.x][head.y])

38 q[tail++]=(struct xoy);

39if(head.x+1

<=n && graph[head.x+1][head.y]!=graph[head.x][head.y])

40 q[tail++]=(struct xoy);

41if(head.y+1

<=n && graph[head.x][head.y+1]!=graph[head.x][head.y])

42 q[tail++]=(struct xoy);

43} 44}

4546

intmain()

58 rep(i,1

,m)62

return0;

63 }

洛谷1141 01迷宮

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

洛谷 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,對於每個連通的格仔答案都是一樣的...