对于一个n个结点的图(存在d数组里),求连通分量并将连通分量打印为1行代码如下:
#include<bits/stdc++.h>
using namespace std;
int d[maxn][maxn],vis[maxn];
int main
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
if(!vis[i])
{
printf("%d",i);
dfs(i);
printf("\n"); //加一句cnt++可以求出连通分量个数
}
}
}
void dfs(int v) //求有向图连通分量
{
vis[v]=1;
for(int i=0;i<n;i++)
if(vis[i]!=1&&d[i][v]&&d[v][i]&&v!=i)
{
printf(", %d",i);
dfs(i);
}
return;
}