在乙個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...