AcWing 1076 迷宮問題 BFS 最短路

2021-10-24 18:52:45 字數 1347 閱讀 9747

題目描述:

給定乙個 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 修...