两个条件判断
1.是否不存在奇数度结点
2.是否是一个图
#include <bits/stdc++.h> using namespace std; const int N=1005; int in[N]; int f[N]; bool isfa[N]; int odd[N]; int n; void init() { for(int i=0;i<N;i++) f[i]=i; memset(in,0,sizeof(in)); memset(isfa,0,sizeof(isfa)); memset(odd,0,sizeof(odd)); } int getf(int a) { if(f[a]==a) return a; else { f[a]=getf(f[a]); return f[a]; } } void merge(int a,int b) { int t1,t2; t1=getf(a); t2=getf(b); if(t1!=t2) f[t1]=t2; } int ju() { int cnt=0; for(int i=1;i<=n;i++) if(f[i]==i) cnt++; if(cnt==1)return 1; else return 0; } int ju2() { for(int i=1;i<=n;i++) if(in[i]&1)return 0; return 1; } int main() { int m; while(~scanf("%d",&n)&&n) { scanf("%d",&m); init(); int a,b,flag=0; for(int i=0;i<m;i++) { scanf("%d %d",&a,&b); if(a!=b) { in[a]++; in[b]++; } merge(a,b); } if(ju()&&ju2())printf("1\n"); else printf("0\n"); } return 0; }