A Maze 迷宮問題

2021-10-03 10:53:25 字數 1472 閱讀 9133

有一張由0、1數字組成的5 × 5的二維陣列表示的地圖,尋找出口到入口的最短路徑。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是出口。

樣例輸入:

樣例輸出:

把地圖抽象成乙個平面直角座標系,每乙個0或1代表乙個點,尋找兩個點之間的最短路徑可用bfs方法,並且走到乙個點要記錄其前序的點。最後從終點根據其前序點回溯至起點,然後從起點輸出至終點。

bfs是解決兩點之間最短路徑的好方法,但是需要開乙個二維陣列來記錄前序點,如果二維陣列比較大的話其實很浪費。

判斷乙個點是否已經走過也可以用map,把這個點和他的前序點插入map,最後輸出路徑的時候在map中find(),然後輸出。

#include

#include

using

namespace std;

struct point

point

(int ix,

int iy)};

intmain()

;int dy=

;bool reach[5]

[5];

int matrix[5]

[5];

for(

int i =

0; i <

5; i++

)//讀入二維陣列

for(

int j =

0; j <

5; j++

) cin >> matrix[i]

[j];

point before[5]

[5];

for(

int i =

0; i <

5; i++

)//前序點置空

for(

int j =

0; j <

5; j++

) queue way;

//bfs方法

way.

push

(point(0

,0))

;while

(!way.

empty()

)}} point path[25]

;int m =0;

point target(4

,4);

while

(target.x !=

0|| target.y !=0)

//從終點回溯到起點

path[m]

.x =0;

//把起點加入路徑

path[m]

.y =0;

for(

int i = m; i >=

0; i--

)//從起點開始輸出路徑

cout <<

"("<< path[i]

.x <<

", "

<< path[i]

.y <<

")"<< endl;

}

程式設計思維 A Maze(廣度優先搜尋)

東東有一張地圖,想通過地圖找到妹紙。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹紙,這兩個位置保證為0。既然已經知道了地圖,那麼東東找到妹紙就不難了,請你編乙個程式,寫出東東找到妹紙的最短路線。input 輸入是乙個5 5的二維陣列,僅由0 1兩數字組成,表示法陣地圖。outpu...

問題 A 迷宮求解問題

時間限制 10 sec 記憶體限制 2048 mb 提交 574 解決 306 提交 狀態 討論版 用乙個m n的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對給定的迷宮,求出找到的第一條從入口到出口的通路,或得到沒有通路的結論。我們指定 1 迷宮的入口為矩陣的左上角 1,1 迷宮...

迷宮問題求解(1) 簡單迷宮

標頭檔案 include include include include include maze.h define max 100 typedef struct position datatype typedef struct stack stack void stackinit stack s ...