3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
1 0
判断欧拉回路
①是否是通路
②所有点的度数为偶数
判断通路用并查集
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> using namespace std; int d[1010]; int r[1010]; int find_x(int x) { int son=x; int temp; while(x!=r[x]) x=r[x]; while(son!=x){ temp=r[son]; r[temp]=x; son=temp; } return x; } int fun(int x,int y) { x=find_x(x); y=find_x(y); if(x!=y){ r[x]=y; } } int main() { int N,M; while(scanf("%d",&N),N){ scanf("%d",&M); memset(d,0,sizeof(d)); int a,b; for(int i=0;i<=N;i++){ r[i]=i; } for(int i=0;i<M;i++){ scanf("%d%d",&a,&b); fun(a,b); d[a]++; d[b]++; } int flag=1; int num=0; for(int i=1;i<=N;i++){ if(r[i]==i) num++; } for(int i=1;i<=N;i++){ if(d[i]&1){ flag=0; break; } } if(flag&&num==1)printf("1\n"); else printf("0\n"); } return 0; }
版权声明:本文为博主原创文章,转载请注明出处。
原文:http://blog.csdn.net/ydd97/article/details/47158697