广度优先搜索属于图算法的一种,英文缩写为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
0 条评论