[SOJ] connect components in undirected graph

题目描述:

输入一个简单无向图,求出图中连通块的数目

输入:

输入的第一行包含两个整数n和m,n是图的顶点数,m是边数。1<=n<=1000,0<=m<=10000。

以下m行,每行是一个数对v y,表示存在边(v,y)。顶点编号从1开始。

题目分析:

利用深度优先搜索寻找连通块数,一趟深度优先搜索为一个连通块,深度优先搜索次数为块数。

#include<iostream>
#include<memory>
using namespace std; const int MAX=1001;
int edge[MAX][MAX];
int n, m;
int num=0;
bool isvisited[MAX]; void DFS(int current)
{
for(int i=1;i<=n;i++)
{
if(!isvisited[i]&&edge[current][i])
{
isvisited[i]=true;
DFS(i);
}
}
} int main()
{
cin>>n>>m; int a, b; //初始化
memset(edge, 0,sizeof(edge));
memset(isvisited, false, sizeof(isvisited)); for(int i=0;i<m;i++)
{
cin>>a>>b;
edge[a][b]=1;
edge[b][a]=1;
} for(int i=1;i<=n;i++)
{
if(!isvisited[i])
{
num++;
isvisited[i]=true;
DFS(i);
}
} cout<<num<<endl;
return 0;
}

  

上一篇:python 斐波那契数列 fibonacci


下一篇:转 对菜鸟开发者的叮咛:花一万个小时练习Coding,不要浪费一万小时无谓地Debugging