判断无向图的欧拉回路,不解释,,,,
AC代码:
#include<iostream> #include<string.h> #include<cstdio> #define CLR(arr,val) memset(arr,val,sizeof(arr)) #define N 1001 using namespace std; int deg[N]; int Father[N]; void init(int n) { CLR(deg,0); for(int i=0;i!=n+1;++i) Father[i]=i; } int Find(int x) { if(x==Father[x]) return x; return Father[x]=Find(Father[x]); } void Union(int x,int y) { int a=Find(x); int b=Find(y); if(a!=b) { Father[a]=b; } } int main() { int n,m; while(~scanf("%d%d",&n,&m),n) { init(n); int a,b; for(int i=0;i!=m;++i) { scanf("%d%d",&a,&b); deg[a]++; deg[b]++; Union(a,b); } int res=0,ans=0; for(int i=1;i<=n;++i) { if(Find(i)==i) res++; if(deg[i]&1) ans++; } if(res>1||ans) puts("0"); else puts("1"); }return 0; }