广度优先搜索BFS类似于二叉树的层序遍历算法
以V0为源点,按距离由近至远依次访问和V有路径相同且路径长度为1,2,3...的顶点。广度优先搜索是一种分层的查找过程,每向前走一步可能访问一批顶点,依一个辅助队列的帮助,记忆正在访问的顶点的下一层顶点
伪代码如下:
bool visited[MAX_NUM]; //访问标记数组
void BFS_Traverse(Graph G)
{
for(int i=0; i<G.vex_num; ++i;)
{
visited[i] = false;
}
//完成对标记数组的初始化
InitQueue(Q);
for(int i=0; i<G.vex_num; ++i)
{
if(visited[i] == false)
BFS(G, i); //防止漏掉一些非连通图
}
}
void BFS(Graph G, int v)
{
visit(v);
visited[v] = true;
EnQueue(Q, v);
while(!isEmpty(Q)
{
DeQueue(Q, v);
for(w = FirstNeighbor(G, v) //检测v的所有邻接结点
{
if(visited[w] == false)
{
visit(w);
visited[w] = true;
EnQueue(Q, w);
}
}
}
}