描述:
从任意一点出发,然后用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;i<n;i++){
if(visitflag[i]==0)
DFS(i,n,visitflag,edge,marked);
marked++;
}
//cout<<marked<<endl;
for(int i=1;i<marked;i++){
for(int j=0;j<n;j++)
if(visitflag[j]==i)
cout<<j<<" ";
cout<<endl;
}
}
里面有DFS和很好的实现和运用