BFS迷宮問題模型(具體模擬過程見《啊哈演算法》)

2022-07-27 10:42:14 字數 1953 閱讀 1812

題目描述與dfs模型走迷宮那篇一樣。小哈被困在迷宮裡,小哼解救小哈。

這裡用bfs來寫。bfs(廣搜)與dfs(深搜)的區別就在於,dfs是「不撞南牆不回頭」,一條路走到不能再走之後才會回到起始點,另開闢一條新的道路;而bfs是將道路層層擴充套件,走到乙個點時會同時搜尋附近能到達的點,同時進行。

這裡先附上我最開始的**(但編譯出來是錯的):

#include

#include

#include

#include

#include

#include

#include

using namespace std;

struct node

;int main()

,book[1005][1005]=;

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

int i,j,n,m,p,q1,tx,ty,flag=0;

int head,tail;  //佇列

scanf("%d%d",&n,&m);

scanf("%d%d",&p,&q1);

for(i=1;i<=n;i++)

}head=1;

tail=1;

q[head].x=1;

q[head].y=1;

q[head].s=0;

tail++;

book[1][1]=1;

while(headn||tx<1||ty>m||ty<1)

continue;

if(a[tx][ty]==0&&book[tx][ty]==0)

if(tx==p&&ty==q1)

}if(flag==1)

break;

else

head++;

}printf("%d\n",q[head-1].s);  //這個時候tail指向佇列的末尾

return 0;

}一開始是不能輸出,把最開始的那些變數定義在主函式前竟然就可以進行輸入了(我也不知道為啥)。然後可以輸入之後,我嘗試了這組資料,但輸出是0,還是錯的:

問了同學,她把我的輸入輸出格式給改了(cin  cout,但是我覺得這沒什麼影響呀);還有走四個方向的那個for迴圈,我 i  一開始從1開始,這樣就只進行了三個方向的搜尋,應該從i=0開始;最後是輸出q[head].s,而不是head-1;最後正確**如下:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

struct node

;struct node q[5000];

int a[1005][1005]= ;

int book[1005][1005]= , dir[4][2]= ,,,};

int main()

}cin>>p>>q1;

head=1;

tail=1;

q[head].x=1;

q[head].y=1;

q[head].s=0;

tail++;

book[1][1]=1;

while(headn||tx<1||ty>m||ty<1)

continue;

if(a[tx][ty]==0&&book[tx][ty]==0)

if(tx==p&&ty==q1)

}if(flag==1)

break;

else

head++;

}printf("%d\n",q[head].s+1);  //這個時候tail指向佇列的末尾

return 0;

}

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