SWUST OJ 1065: 无向图的连通分量计算

题目描述

假设无向图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);
}

注意

该程序仅供学习参考!

上一篇:kruskal算法(克鲁斯卡尔算法)详解


下一篇:20201204-3 opp编程好处与构造函数