SWUST OJ1065 无向图的连通分量计算

无向图的连通分量计算

5000(ms) 10000(kb) 2555 / 5521
假设无向图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

本题利用深度优先搜索(dfs)从每个顶点开始搜素,建立额外的顶点数组,最后统计生成深度优先搜索的次数

  1. 录入邻接矩阵
  2. 建立顶点数组
  3. 循环从每一个顶点开始遍历图,遍历过的顶点在顶点数组记录为1(默认为0),遍历前计数器加 1,最后输出计数器即可。

代码如下

#include<iostream>
using namespace std;
int g[20][20]={0},n;
int flag[20]={0};
int dfs(int x,int y)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(flag[i]==0&&g[y][i]>0)
		{
			flag[i]=1;
			dfs(y,i);
		}
	}
 }
int main()
{
	cin>>n;
	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cin>>g[i][j];
		}
	}
	int count=0;
	for(int i=0;i<n;i++)
	{
		if(flag[i]==0)
		{
			count++;
			flag[i]=1;
			dfs(0,i);
		}
	}
	cout<<count;
	return 0;
}
posted @ 2019-05-09 11:46  jirath  阅读(371)  评论(0编辑  收藏  举报