bfs 迷宮問題

2021-10-03 08:46:23 字數 1216 閱讀 9087

題意:

輸入是乙個5 × 5的二維陣列,僅由0、1兩數字組成,表示法陣地圖。0表示可以走,1表示不可以走,左上角是入口,右下角是出口,找出左上角到右下角的最短路徑

(資料保證有唯一解)

思路:

進行bfs,出口(0,0)設為bfs的起點,一層一層的向外擴充套件,第一次到達出口時此時的層數也就是最短的步數,路徑可以通過記錄前驅節點遞迴輸出路徑,vis[i][j]來記錄點的狀態,0代表未到過且可以到達,1代表不能通過,-1代表到達過,path[i][j]是自定義結構體頂點型別point的陣列,用來記錄頂點的前驅,對於每層向外擴充套件時分為上下左右四個方向,用int 型陣列dx,dy來做為偏移量,進行廣搜,判斷是否可以到達,是否在邊界內。

總結:

對於迷宮問題尋找最短路徑就是無向圖尋找最短路徑問題,最常用的方法就是進行bfs搜尋,bfs利用佇列實現,最主要的是特判的條件(即是否到達終點),記錄搜尋時每個點的狀態,並且記錄每個節點的前驅節點以便輸出路徑,還有小技巧就是上下左右四個方向可以用陣列來來記錄偏移量dx,dy,然後迴圈遍歷即可。

**:

#include

#include

using

namespace std;

int dx=

;//偏移量

int dy=

;int vis[7]

[7];

//記錄點的狀態

int sx,sy,tx,ty;

struct point

; point path[7]

[7];

//記錄前驅

void

print

(point t)

print

(path[t.x]

[t.y]);

cout<<

"("<","<<

' '<")"

void

bfs(

)for

(int i=

0;i<

4;i++

)//迴圈擴充套件}}

}int

main()

sx=0;sy=

0;tx=

4; ty=4;

bfs();

return0;

}

迷宮問題bfs

迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...

迷宮問題BFS

the code 資料結構迷宮.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include define n 4 定義迷宮為4 4 using namespace std struct pot 為記錄路徑的rec準備,座標 x...

迷宮問題bfs

小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。小明只能向上下左右四個方向移動。輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。每組輸入的第一行是兩個整數n和m 1 n,m 100 接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。字元的含義如下 s 起點 ...