BFS(入門題 迷宮)

2021-09-11 00:24:54 字數 1411 閱讀 9029

//這題之前用dfs寫過,現在再用它來寫bfs

1185: 走迷宮

time limit: 1 sec memory limit: 128 mb

submit: 435 solved: 168

[submit][status][web board]

description

給一張個迷宮,問能否從起點走到終點,只能往上下左右走,不能斜著走

input

多組測試資料,每組第一行兩個正整數,分別為n和m

表示n這個迷宮有n行m列(0接著是n行m列,

'#'表示路

『*』表示牆

『s』表示起點

『t』表示終點

output

每組測試資料輸出乙個結果,如果能從s走到t,輸出「yes」,否則輸出「no」

sample input

2 2s*

#t3 3

s*##t##

sample output

yesno

hint

source

/*bfs,廣度優先搜尋,類似於樹的層序遍歷。

所以,寫bfs的關鍵在於確定每一層的元素。

首先要確定起點,然後拿出起點來看一下是否為終點,如果是,則結束搜尋。

如果不是,就以此點為擴充套件,擴充套件出與它相連的點並且沒有看過的點作為下一層的元素。。

每層的元素都可以擴充套件0個到多個元素作為下一層元素。然後一層一層乙個乙個拿出來看是不是終點。

從上述可以看出,先進先出,可以維護乙個佇列。每次拿出乙個元素來看是不是終點,不是的話就把它可以擴充套件出來的並且沒有訪問過的下一層元素加入到佇列中~,直到拿出來的是終點或者佇列已空

/ac_code:

/本題應該注意:不能用%c乙個乙個字元讀入然後沒讀一行加getchar(),這樣寫提交會過不了,應該盡量避免使用getchar(),這裡使用%s一行一行讀入就能ac

*/

#include using namespace std;

char a[15][15];

int vis[15][15];

int n,m;

struct date

;date s,p;

queueq;

int step_x= ,step_y = ;

int bfs()}}

}return 0;

}int main()

for(int i = 0; i < n; i++)}}

if(bfs())

printf("yes\n");

else

printf("no\n");

}return 0;

}

3752 走迷宮 BFS入門題

描述 乙個迷宮由r行c列格仔組成,有的格仔裡有障礙物,不能走 有的格仔是空地,可以走。給定乙個迷宮,求從左上角走到右下角最少需要走多少步 資料保證一定能走到 只能在水平方向或垂直方向走,不能斜著走。輸入 第一行是兩個整數,和 代表迷宮的長和寬。1 r,c 40 接下來是 行,每行 個字元,代表整個迷...

bfs入門 走迷宮

題意 給乙個n m的二維陣列,s表示入口,t表示出口,點表示牆不可達,表示路可達。求s走到到t的最短距離。輸入樣例 5 6.s t.輸出樣例 include include include include include include include using namespace std con...

題解 bfs之迷宮問題(入門)

小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。小明只能向上下左右四個方向移動。輸入輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。每組輸入的第一行是兩個整數n和m 1 n,m 100 接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。字元的含義如下 s 起...