題目描述:
給定乙個 n×n 的二維陣列,如下所示:
int maze[5]
[5]=
;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
資料保證至少存在一條從左上角走到右下角的路徑。
輸入格式
第一行包含整數 n。
接下來 n 行,每行包含 n 個整數 0 或 1,表示迷宮。
輸出格式
輸出從左上角到右下角的最短路線,如果答案不唯一,輸出任意一條路徑均可。
按順序,每行輸出乙個路徑中經過的單元格的座標,左上角座標為 (0,0),右下角座標為 (n−1,n−1)。
資料範圍
0≤n≤1000
輸入樣例:
501
0000
1010
0000
0011
1000
010
輸出樣例:
001
0202
1222
3243
444
分析:利用bfs求最短路徑的問題,這道題難點在於輸出路徑吧,之前碰到的只需要輸出長度,利用乙個pre陣列,記錄下當前節點是由哪個節點過來的,然後從終點倒著輸出一遍即可。
#include
#include
#include
using
namespace std;
typedef pair<
int,
int> pii;
const
int n =
1010
;int n ;
int g[n]
[n];
pii pre[n]
[n];
pii q[n*n]
;void
bfs(
int sx,
int sy)
;memset
(pre,-1
,sizeof pre)
; pre[sx]
[sy]=;
int dx=
, dy=
;while
( hh <= tt)
; pre[a]
[b]= t;}}
}int
main()
printf
("%d %d\n"
,end.first,end.second)
;return0;
}
AcWing 1076 迷宮問題
題目描述 給定乙個 n n 的二維陣列,如下所示 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。資料保證至少存在一條從左上角走到右下角的路徑。輸入格式 第一行包含整數 n。接下來 n 行,每...
AcWing 1076 迷宮問題
原題鏈結 考察 bfs 錯誤思路 定義結構體node,用node裡vector記錄路徑.此思路會tle,當n很大時,每次賦值都要消耗一定時間.正確思路 用陣列記錄路徑,即用pii 陣列記錄到達該點的上一步的座標.到時候再迭代即可.注意 當迭代的時候,不要重新定義pii it 最最注意 如果取單個座標...
AcWing 1076 迷宮問題
題目傳送門 練習使用廣度優先搜尋時,記錄路徑的辦法,可以採用倒序的廣度優先搜尋,也可以採用正序的廣度優先搜尋,但倒序的 簡單些,正序的麻煩些。include using namespace std 邊權為1的時候,可以使用bfs求最短路徑 學習 bfs中如何記錄路徑,就是把bool st n n 修...