题目描述
假设无向图G采用邻接矩阵存储,编写一个算法求连通分量的个数。
输入
第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1),接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,1表示不邻接。
输出
连通分量的个数。
样例输入
5
0 1 0 1 1
1 0 1 1 0
0 1 0 1 1
1 1 1 0 1
1 0 1 1 0
样例输出
1
参考程序
#include<stdio.h>
int a[100]={0};//s初始化标记
void CreateMap(int n,int edges[100][100])//创建邻接矩阵
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&edges[i][j]);
}
}
}
void SearchMap(int k,int edges[100][100],int n)//查找所有连通的结点,并且标记
{
a[k]=1;
for(int i=0;i<n;i++)
{
if(edges[k][i]==1&&a[i]==0)
SearchMap(i,edges,n);
}
}
int main()
{
int edges[100][100];
int n;
scanf("%d",&n);
CreateMap(n,edges);
int sum=0;//初始化统计值
for(int i=0;i<n;i++)//从第一个结点开始到n-1查找连通分量
{
if(a[i]==0)//如果该结点未标记则sum+1,并且查找于该结点连接的所有结点
{
sum++;
SearchMap(i,edges,n);
}
}
printf("%d",sum);
}
注意
该程序仅供学习参考!