演算法基礎 4127 迷宮問題 廣度優先搜尋演算法

2021-10-20 22:29:04 字數 1639 閱讀 8297

題目:

定義乙個矩陣:

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

輸入

乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。

輸出

左上角到右下角的最短路徑,格式如樣例所示。

樣例輸入

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

樣例輸出

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

#include

#include

#include

#include

using

namespace std;

int visited[6]

[6];

//儲存每個點的訪問情況

int a[6]

[6];

struct node};

vector q;

intmain()

if(q[c]

.x+1

<=

4&&visited[q[c]

.x+1

][q[c]

.y]==

0&&a[q[c]

.x+1

][q[c]

.y]==0)

if(q[c]

.y-1

>=

0&&visited[q[c]

.x][q[c]

.y-1]==

0&&a[q[c]

.x][q[c]

.y-1]==

0)if(q[c]

.y+1

<=

4&&visited[q[c]

.x][q[c]

.y+1]==

0&&a[q[c]

.x][q[c]

.y+1]==

0)c++;}

int i=q.

size()

-1;int num[

100]

;int inum=0;

while(1

)for

(int i=inum-

1;i>=

0;i--

)return0;

}

這是乙個標準的廣度優先搜尋演算法。將初始起點放入佇列,然後搜尋上下左右看能否滿足條件,如果滿足條件則搜尋,並且將本座標資訊放入其中。

滿足條件:1.是否越界2.是否被訪問過3.是否是通路

最後將從末尾到起點的路徑取出

注意:因為要取出路徑,所以盡量不要使用佇列,可以用陣列代替。

廣度優先演算法 迷宮問題

與深度優先演算法不同的是,廣度優先演算法是先遍歷層級在前的元素再遍歷層級在後的元素,即再遍歷完第一層元素後,再依次遍歷第二層元素,依次類推。而深度優先演算法是從乙個節點出發依次遍歷下一層節點直到節點之後沒有後繼元素。定義乙個二維陣列 int maze 5 5 public class main,st...

迷宮問題(廣度優先)

參考資料結構一書第50頁 嚴蔚敏 主要是運用廣搜,在迷宮中輸出一條最短路徑,以下是我的 include include include using namespace std void setcolor unsigned short forecolor,unsigned short backgrou...

OJ 4127 迷宮問題 遞迴輸出路徑

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