c语言图的两种遍历方式

邻接矩阵存储图的深度优先遍历

void DFS(MGraph G,Vertex v){
     
    int i;
    visited[v] = 1;
    printf(" %d",v);
    for(i = 0; i < G.vexnum; i++) 
    {
     
        if(G.arcs[v][i] == 1 && !visited[i])
        {
     
           DFS(G, i);
        }
    }
}

邻接表存储图的广度优先遍历

void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ){
     
    int queue[100];
    Visit(S);
    Visited[S]=true;
    int rear=0,front=0;
    queue[rear++]=S;
    while(rear!=front){
     
        PtrToAdjVNode t=Graph->G[queue[front++]].FirstEdge;
        while(t){
     
            int x=t->AdjV;
            if(!Visited[x]){
     
                queue[rear++]=x;
                Visit(x);
                Visited[x]=true;
            }
            t=t->Next;
        }
    }
}

你可能感兴趣的:(练习题,有向图,数据结构,算法,c语言)