BFS DFS的綜合運用 著色法 連通塊

2021-10-23 14:08:31 字數 1955 閱讀 5969

20200820寫這一道題(01迷宮)花了整整乙個下午,最後在寫**-翻書-思考-看題解-思考-寫**-翻書-思考-看題解-思考這樣乙個迴圈下,終於寫了出來,激動之餘,寫篇部落格記錄下此時的心情以及ac的**。

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

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

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

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

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

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

輸入

2 2

0110

1 12 2

4

4

所有格仔互相可達。

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

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

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

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

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

首先是bfs解法:

#include

int n,m,startx,starty,ans;

int a[

1005][

1005

],book[

1005][

1005];

int next[5]

[2]=

,,,,

};int head=

1,tail=1;

struct note

;struct note que[

1000005];

void

bfs(

int x,

int y)

} head++;}

for(

int i=

1;iintmain()

}while

(m--)}

return0;

}

接下來是dfs解法

#include

int n,m,ans[

100002

],sx,sy,book[

1002][

1002];

//ans用來儲存答案,book用來標記

int a[

1002][

1002];

//a用來儲存地圖

int next[5]

[2]=

,,,,

};//四個方向

void

dfs(

int x,

int y,

int z,

int t)}}

intmain()

}for

(int i=

1;i<=m;i++

)else

}for

(int i=

1;i<=m;i++

)printf

("%d\n"

,ans[i]);

return0;

}

這就是寫了整整乙個下午的題目,一開始思路都沒有,接著有思路了,但是超時了三個,後來看提示說明才知道資料很大(這也給了我們乙個啟發,如果參加藍橋杯、ccf等比賽時,不要過了樣例馬上就去提交哦,要看題目給的提示以及檢查自己寫的**是否跟思路一致了),如果每輸入乙個起始座標就重新搜一次肯定會超時。優化**優化了一段時間還是超時三個,接著看題解慢慢得就發覺這是連通塊+著色標記法,還好前一天有學習到,理解起來就沒有那麼困難!!!也有的同學是用並查集做的,但是本萌新還沒有學到,就沒有去了解。及時總結,複習,不然第二天還是會忘記的!!!挑戰自己,讓自己難起來,加油!!

MGRE GRE PPP協議綜合運用

1.拿到拓撲圖,我們先看第乙個要求,r5是isp,isp是網路服務運營商,不能被通告進路由協議,所以在配置時,要寫一條靜態預設,指向isp 2.從拓撲圖我們可以看出,在實驗前需要先加2sa板卡,連線成串線 3.在完成前兩步後,開始進行配置,先配置直連路由,配置完成後,在配置各種要求 4.最後使用靜態...

Flutter form表單綜合運用

老規矩,看圖 一 效果圖 以下 複製進main.dart檔案即可執行 二 實現 import package flutter material.dart override widget build buildcontext context class formdemopage extends sta...

L6 11 綜合運用

本單元我們學習了模組知識,學習了常用的模組如 時間模組math,時間模組time和datetime,隨機模組random等,本節課我們將系統的去運用所學知識,完成一些 程式。猜拳又稱為划拳,在面對一些小事情,我們總是通過猜拳來決定。學習了模組後,我們可以模擬和電腦玩剪刀石頭布的遊戲。分析題目 玩家和...