題目描述與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 起點 ...