bfs图的遍历
bfs图的遍历
以前我同学问我:
假如有下面一个地铁线路图
请问从A到B最少经过几站到达
同学说他可以用深搜搜出来
那在这里深搜适合吗
正确答案是深搜不适合
如果要用深搜的话
要枚举每一条路线
就会搜出一些奇怪无效的路线
最好的方法是广搜
广搜不用进行打擂台比较
也不会出现搜到离终点很远绕路的路线
其中代码如下
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int e[10][10],v[10],s[10];
queue<int>a;
int bfs(){
a.push(1);
v[1]=1;
while(1){
int h=a.front();
a.pop();
for(int i=1;i<=9;i++){
if(e[h][i]&&v[i]==0){
s[i]=s[h]+1;
v[i]=1;
a.push(i);
}
}
if(s[8]) break;
}
return s[8];
}
int main(){
e[1][2]=1;
e[2][1]=1;
e[2][3]=1;
e[2][4]=1;
e[2][7]=1;
e[3][2]=1;
e[4][2]=1;
e[4][5]=1;
e[4][6]=1;
e[4][7]=1;
e[5][4]=1;
e[6][4]=1;
e[7][2]=1;
e[7][4]=1;
e[7][8]=1;
e[7][9]=1;
e[8][7]=1;
e[8][9]=1;
cout << bfs();
return 0;
}