C语言数据结构_图的遍历-广度优先搜索

image-20220302011704112

//广度优先搜索一个连通图
void BFS(VNode G[], int v){
    int w;
    visit(v);       //访问顶点v
    visit[v] = 1;       //将顶点v对应的访问标记置1
    EnQueue(q, v);      //顶点v入队列
    while(!emptyQ(q)){
        DeQueue(&q, &v);        //出队列,元素由v返回
        w = FirstAdj(G, v);     //找到顶点v的第一个邻接点,如果无邻接点,返回-1
        while( w != -1){
            if(visited[w] == 0){
                visit(w);
                EnQueue(q, w);      //顶点w入队列
                visited[w] = 1;
            }
        w = NextAdj(G, v);      //找到顶点v的下一个邻接点,如果无邻接点,返回-1
        }
    }
}

//对图G=(V,E)进行广度优先搜索的主算法
void Travel_BFS(VNode G[], int visited[], int n){
    int i;
    for(i=0; i<n; i++)
        visited[i] = 0;         //将标记数组初始化为0
    for(i=0; i<n; i++)
        if(visited[i] == 0)     //若有顶点未被访问,从该顶点开始继续广度优先搜索
        BFS(G, i);
}

image-20220302011803753

image-20220302011832899

posted @ 2022-03-08 20:26  zonkidd  阅读(51)  评论(0编辑  收藏  举报