學霸的迷宮 最短路徑 廣搜

2021-07-10 12:31:38 字數 1842 閱讀 9546

學霸的迷宮  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

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

輸入格式

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

接下來n行,每行m個數,數之間沒有間隔,為0或1中的乙個。0表示這個格仔可以通過,1表示不可以。假設你現在已經在迷宮座標(1,1)的地方,即左上角,迷宮的出口在(n,m)。每次移動時只能向上下左右4個方向移動到另外乙個可以通過的格仔裡,每次移動算一步。資料保證(1,1),(n,m)可以通過。

輸出格式

第一行乙個數為需要的最少步數k。

第二行k個字元,每個字元∈,分別表示上下左右。如果有多條長度相同的最短路徑,選擇在此表示方法下字典序最小的乙個。

樣例輸入

input sample 1:

3 3001

100110

input sample 2:

3 3000

000000

樣例輸出

output sample 1:

4rdrd

output sample 2:

4ddrr

資料規模和約定

有20%的資料滿足:1<=n,m<=10

有50%的資料滿足:1<=n,m<=50

有100%的資料滿足:1<=n,m<=500。

終於學會列印路徑了陣列裡的父親元素是列印路徑的關鍵

此題輸入格式中 資料之間沒有空格,可以用 %1d 輸入,也可以用字元輸入

#include #include #include #include #include #include #include #include #include #include using namespace std;

/*3 3

000000

0003 3

001100

1103 3

0 0 0

0 0 0

0 0 0

*/typedef struct queueque;

int n,m;

int a[510][510];

int book[510][510];

que q[2510];

int head,tail;

int luj[2510];

void bfs(),,,

};book[1][1] = 1;

head = 1;

tail = 1;

q[tail].x = 1;

q[tail].y = 1;

q[tail].step = 0;

q[tail].f = -1;

tail++;

while(head < tail)

if(tx == n && ty == m)

} if(flag) break;

head++; }}

void print()

for(int k = j; k >= 1; --k)

printf("\n");

}int main(int argc, char *argv)

getchar();

} bfs();

printf("%d\n",q[tail-1].step);

print();

return 0;

}

學霸的迷宮 廣搜例題

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

廣搜之倒敘輸出最短路徑

問題描述 給你乙個迷宮,讓你求出從起點到終點的最短路,並且輸出路徑,這個程式是倒這的,如果要正的,記錄一下,再輸出 include include include include using namespace std struct note dian,dian,book 105 105 queue...

poj3984迷宮問題 廣搜 最短路徑 模擬佇列

定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...