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;
}

posted @ 2021-12-12 10:56  KevinLikesCoding  阅读(55)  评论(0编辑  收藏  举报