迷宮 BFS 廣度優先搜尋

2021-09-25 04:36:45 字數 1296 閱讀 8442

小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 ...