您的位置:首页 > 编程语言 > C语言/C++

UVa 10596: Morning Walk

2013-07-29 13:58 453 查看
这题需要判断两个地方:所有点是否在同一个集合中以及各点的度是否均为偶数(即是否可以构成欧拉回路)。

用dfs得到一个连通分量中点的个数,判断是否与总的点数目相等即可知道是否所有点均在一个连通分量中。

我的代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;

int degree[200];
int adj[200][200];
int visit[200];
int N,R;

void dfs(int n, int &c)
{
c++;
visit
=1;
for(int i=0; i<N; i++)
{
if(adj[i]
&& !visit[i])
{
dfs(i,c);
}
}
return ;
}

int main()
{
int ta,tb;
while(cin >> N >> R)
{
memset(adj,0,sizeof(adj));
memset(degree,0,sizeof(degree));
memset(visit,0,sizeof(visit));

for(int i=0; i<R; i++)
{
cin >> ta >> tb;
adj[ta][tb]=adj[tb][ta]=1;
degree[ta]++;
degree[tb]++;
}
int ok=1,count=0;
for(int i=0; i<N; i++)
{
if(degree[i]%2==1) { ok=0; break;}
}
if(!ok) cout << "Not Possible\n";
else
{
dfs(0,count); //cout << count << endl;
if(count != N) cout << "Not Possible\n";
else cout << "Possible\n";
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UVa c++ 简单图论题 DFS