小c最近在研究機械人,他想看看自己的機械人夠不夠智慧型,於是他將機械人放在乙個n*m的迷宮中,看看機械人能不能在最短的時間內到達目的地,可是小c不知道最短的時間是多少,現在請你幫他算算機械人到達目的地的最短時間是多少?
輸入描述:輸入資料第一行兩個整數n和m。n和m的範圍[10,500]。
接下來n行,每行m個元素,表示迷宮的每個方格。
's』表示機械人的出發點,
't』表示目的地,
'#'表示該方格不能通過,
'.'表示可以通過。
輸出描述:輸出乙個整數表示機械人到達目的地的最短時間,如果機械人不能到達目的地,輸出-1。
示例1解題思路:使用佇列進行廣度優先搜尋,常用於解決最優問題輸入3 3
s…##.
.t.輸出
5
這道題我的mark陣列用於判斷乙個狀態是否已經被擴充套件過,但是使用的時候我寫成了判斷條件mark[i][j] == 『1』 …浪費了不知道多長時間…o(╥﹏╥)o
#include
#include
using namespace std;
char map[
501]
[501];
int mark[
501]
[501];
int n, m;
struct node
;int mynext[4]
[2];
queue q;
intbfs
(int x,
int y)
mark[nx]
[ny]=1
; node tmp;
tmp.x = nx; tmp.y = ny;
tmp.t = now.t +1;
q.push
(tmp);if
(map[nx]
[ny]
=='t')}
}return-1
;}intmain()
}}first.t =0;
q.push
(first)
; cout <<
bfs(first.x, first.y)
<< endl;
}system
("pause");
return0;
}
迷宮問題(廣度優先搜尋BFS
給定乙個迷宮,入口為左上角,出口為右下角,問是否有路徑從入口到出口,若有則輸出一條這樣的路徑。注意移動可以從上 下 左 右 上左 上右 下左 下右八個方向進行。迷宮輸入0表示可走,輸入1表示牆。易得可以用1將迷宮圍起來避免邊界問題。本題採用bfs演算法給出解。注意,利用bfs演算法給出的路徑必然是一...
迷宮問題 BFS(廣度優先搜尋)
之前寫迷宮問題用的都是遞迴求解,採用的是dfs深度優先搜尋,從來沒有想到過用廣度優先搜尋,這次碰到了乙個迷宮題,之前的dfs不太合適。題目鏈結點此 假設乙個探險家被困在了地底的迷宮之中,要從當前位置開始找到一條通往迷宮出口的路徑。迷宮可以用乙個二維矩陣組成,有的部分是牆,有的部分是路。迷宮之中有的路...
BFS廣度優先搜尋
廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...