有一張由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 ...