您的位置:首页 > 其它

欧拉回路的判定

2015-12-13 19:39 441 查看
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 1005
int n,m;
vector<int>Edge
;
int deg
;
bool vis
;

void dfs(int x){
int p;
vis[x]=true;
for(int i=0;i<Edge[x].size();i++)
{
p = Edge[x][i];
if(!vis[p])dfs(p);
}
}

int main()
{
while (scanf("%d%d",&n,&m)==2&&n) {

for(int i=1;i<=n;i++){
deg[i]=0;
Edge[i].clear();
}
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
Edge[a].push_back(b);
Edge[b].push_back(a);
deg[a]++;
deg[b]++;
}
bool flag = true;
for(int i=1;i<=n;i++){
if(deg[i]&1){
printf("0\n");
flag = false;
break;
}
}
if(!flag)continue;
memset(vis, 0, sizeof(vis));
dfs(1);
for(int i=1;i<=n;i++){
if(!vis[i]){
flag  = false;
break;
}
}
if(flag)printf("1\n");
else printf("0\n");
}

return 0;
}


欧拉回路是不存在奇度点的;

若果存在奇度点就不需要dfs了;不存在奇度点就dfs如果能把图中的每个点都能访问到就存在欧拉回路;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  欧拉回路的判定