Code Up 10.3问题 A: 第一题(利用DFS求图的连通分量)

问题 A: 第一题

 

题目描述

该题的目的是要你统计图的连通分支数。

输入

每个输入文件包含若干行,每行两个整数i,j,表示节点i和j之间存在一条边。

输出

输出每个图的联通分支数。

样例输入

1 4
4 3
5 5

样例输出

2

题意非常简单明了,此处用DFS求解

注意:1、数组必须开到1000000 量级,不然会运行错误

          2、必须用adj[i].size>0判断是否有路径存在,否则会多求出没有结点信息的。

          3、题目未给结点个数,必须自己统计。

参考代码:

#include 
#include 
#include 
using namespace std;
const int maxv=1000050;
vectoradj[maxv];
bool vis[maxv]={false};

void DFS(int u)
{
	vis[u]=true;
	for(int i=0;ij压入邻接表 
		adj[j].push_back(i);// 将路径j->i压入邻接表
		n=max(n,i); //统计顶点个数 
		n=max(n,j); //统计顶点个数为输入的顶点编号与现在的顶点数中最大的 
	}
	for(int i=1;i<=n;++i)
	{
		if(vis[i]==false&&adj[i].size()>0)//注意此时可能会有没有路径的结点参与遍历,故必须让adj[i].size>0以确保有路径才可遍历! 
		{
			DFS(i);
			num++;
		}
	}
	printf("%d\n",num);
	return 0; 
}

 

 

你可能感兴趣的:(图,#DFS应用)