用BFS解決迷宮問題

2022-09-17 11:48:10 字數 1195 閱讀 2772

在乙個n*n的矩陣裡走,從原點(0,0)開始走到終點(n-1,n-1),僅僅能上下左右4個方向走。僅僅能在給定的矩陣裡走,求最短步數。

n*n是01矩陣,0代表該格仔沒有障礙。為1表示有障礙物。

int mazearr[maxn][maxn]; //表示的是01矩陣

int steparr[4][2] = ,,,}; //表示上下左右4個方向

int visit[maxn][maxn]; //表示該點是否被訪問過。防止回溯,回溯非常耗時。

解題思路:

bfs找出來的是最短路徑,假設用dfs。那麼尋找出來的不是最短路徑。

我們先對原點的上下左右進行訪問,假設上下左右的點非障礙物。而且還沒訪問過,那麼就將這些點入佇列。並設定為已經訪問。然後再依次把這些點出佇列,而且反覆之前的步驟對這些點的進行上下左右訪問。。。。假設最後訪問到終點(n-1,n-1),則結束

**例如以下:

#includeusing namespace std;

//定義迷宮的行列

#define row_col 4

//定義乙個結構體。表示經過的點路徑

struct node

;//賦值

node fuzhi(int x,int y,int step)

//實現乙個迴圈佇列

//***********************************==

#define queuesize 30

typedef struct

rqueue;

rqueue q;

void initiate_queue(rqueue *q)

int queuenotempty(rqueue *q)

node deletequeue(rqueue *q)

//********************===

//迷宮圖的矩陣

int mazearr[4][4]=, ,

, };int visit[row_col][row_col];

//表示上下左右

int steparr[4][2]=,,,};

//對其進行bfs,找出的路徑為最短路徑,注意二位陣列的形參是int (*mazearr)[4]

int bfs(int (*mazearr)[4],node node,int n)

{ for(int i=0;i=0 &&y>=0&&x

BFS迷宮(用佇列解決迷宮問題

提交 狀態 討論版 命題人 如圖所示,迷宮的入口為 1,1 出口為 8,8 用佇列求迷宮 樣例輸出 1 12 1 3 14 1 5 15 2 5 36 3 6 46 5 7 58 5 8 68 7 8 8在看了老師提供的題解後,感覺用指標寫會十分麻煩而且感覺比較亂,就用自己的思路重新做了一下這道題。...

迷宮問題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...