求无向图的连通分量

描述:
从任意一点出发,然后用DFS或者BFS遍历所有能够遍历到的点,同时设置标志来确定是否已经遍历过了,在哪一个marked里面遍历,剩余的再进行循环从剩下的点出发,再遍历,求出所有连通分量
代码

void DFS(int i,int n,int *visitflag,Edge *edge[n],int marked){
    if(visitflag[i]==marked){
        return;
    }
    else{
        visitflag[i]=marked;
        Edge *l=edge[i];
        DFS(l->dest,n,visitflag,edge,marked);
        l=l->link;
    }
}
void ConnectComponents(int n,Edge *edge[n]){
    int visitflag[n];
    int marked=1;
    memset(visitflag, 0, n*sizeof(int));
    for(int i=0;iif(visitflag[i]==0)
            DFS(i,n,visitflag,edge,marked);
        marked++;
    }
    //cout<
    for(int i=1;ifor(int j=0;jif(visitflag[j]==i)
                cout<" ";
        cout<

里面有DFS和很好的实现和运用

你可能感兴趣的:(c++的基本)