`
阿尔萨斯
  • 浏览: 4109172 次
社区版块
存档分类
最新评论

数据结构 - 图的广度优先遍历(C++)

 
阅读更多
Boolean visited[MAX_VERTEX_NUM]; //访问标志数组。
Status (*VisitFunc)(int v); //VisitFunc是访问函数,对图的每个顶点调用该函数。

void BFSTraverse (Graph G, Status(*Visit)(int v)) //图的广度优先遍历。
{
    VisitFunc = Visit;
    for(v=0; v<G.vexnum, ++v)
        visited[v] = FALSE;
    initQueue(Q); //置空辅助队列Q。
    for(v=0; v<G.vexnum; ++v)
        if(!visited[v])
        {
            visited[v]=TRUE;
            VisitFunc(v);
            EnQueue(Q, v); //v入队列
            while(!QueueEmpty(Q))
            {
                DeQueue(Q, u); //队首元素出队并置为u。
                for(w=FirstAdjVex(G,u); w>=0; w=NextAdjVex(G,u,w))
                    if(!Visited[w]) //w为u的尚未访问的邻接顶点。
                    {
                        Visited[w]=TRUE;
                        VisitFunc(w);
                        EnQueue(Q, w);
                    }
            }
        }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics