广度优先搜索属于图算法的一种,英文缩写为BFS即Breadth First Search.其过程简要来说是对每一个节点的所有邻接点进行遍历,而且每个节点只能访问一次 。

需要注意的关键词:滚雪球、队列、邻接矩阵、辅助数组。

广度优先搜索的内容体现在遍历上,下面是最基础最简单的无向图的遍历方法。

图如下:

代码如下(含注释):

#include <iostream>
#include <queue>

using namespace std;

void bfs(int v,int visit[],int neigh[][7])
{
    queue <int> Q;
    Q.push(v);//访问即入队
    cout << v;
    visit[v] = 1;//标记已到达
    while(!Q.empty())//如果队列不空
    {
        v = Q.front();//记录
        Q.pop();//出队
        for(int i=0;i<7;i++)
        {
            if(neigh[v][i]!=0 && visit[i]!=1)
            {
                Q.push(i);//邻接点入队
                cout << i;
                visit[i] = 1;//标记已到达
            }
        }
    }

}

int main()
{
    int neighbor[7][7] = {{0,1,1,0,0,0,0},{1,0,0,1,1,0,0},{1,0,0,0,0,1,1},{0,1,0,0,0,0,0},{0,1,0,0,0,1,0},{0,0,1,0,1,0,0},{0,0,1,0,0,0,0}};//建立邻接矩阵
    int visited[7] = {0,0,0,0,0,0,0};//建立辅助数组
    bfs(0,visited,neighbor);
    return 0;
}

输出:0123456

分类: 计算机

Reason

在漫漫梦路上踽踽独行的人……

0 条评论

发表回复

Avatar placeholder