學霸的迷宮 廣搜例題

2021-09-22 19:53:56 字數 1325 閱讀 8657

題目鏈結

學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。可是他現在正向妹子解釋這件事情,於是就委託你幫他找一條最短的路線。

第一行兩個整數 n,m 為迷宮的長寬。

接下來n行,每行 m 個數,數之間沒有間隔,為0或1中的乙個。

0 表示這個格仔可以通過,1 表示不可以。

假設你現在已經在迷宮座標(1,1)的地方,即左上角,迷宮的出口在(n, m)。

每次移動時只能向上下左右 4 個方向移動到另外乙個可以通過的格仔裡,每次移動算一步。

資料保證(1, 1),(n, m)可以通過。(0第一行乙個數為需要的最少步數 k。

第二行 k 個字元,每個字元 ∈,分別表示上下左右。

如果有多條長度相同的最短路徑,選擇在此表示方法下字典序最小的乙個。

3 3

001100

110

4

rdrd

輸出結果。

注視很清晰哈

#include #include #include #include #include #define s 1<<10

using namespace std;

/** 儲存位點資訊 **/

struct step

;/** 行數和列數的變數 **/

int n, m;

/** 往 下左右上 走的座標和對應字母的儲存 **/

int cx[4] = ;

int cy[4] = ;

char to[4] = ;

/** pot - 儲存地圖資料;way - 儲存移動資料 **/

int pot[s][s];

int way[s][s];

/** 廣搜佇列,儲存可能的行動路線 **/

dequer;

void fd()

/** 如果遇到出口位點則回溯檢視路徑 **/

if (b.x==n && b.y==m)

while (!w.empty()) cout << w.top(), w.pop();

cout << endl;

/** 注意這裡一定要 return 不然會繼續迴圈直到 r 為空 **/

/** 可能會會導致答案錯誤 **/

return ;}}

}}int main()

學霸的迷宮 最短路徑 廣搜

學霸的迷宮 時間限制 1.0s 記憶體限制 256.0mb 問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到...

學霸的迷宮 藍橋杯演算法提高 廣搜 bfs 經典問題

問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。可是他現在正向妹子解釋...

學霸的迷宮

學霸的迷宮 時間限制 1.0s 記憶體限制 256.0mb 問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到...