欧拉通路:图中所有的节点的度都是偶数。
所以只需要记一下每个点出现的次数即可。
有一种像下面的特例(n==6):
1 4
/ /
2---3 5---6
虽然每个节点的度都是2,但分成了两部分。
所以,还要用并查集判断一下。
1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN=1000+5; 5 const int INF=100000000; 6 7 int node[MAXN]; 8 int parent[MAXN]; 9 10 int main(){ 11 int n,m; 12 while(scanf("%d",&n) && n!=0){ 13 scanf("%d",&m); 14 for(int i=0;i<=n;i++){ 15 node[i]=0; 16 parent[i]=i; 17 } 18 int a,b; 19 while(m--){ 20 scanf("%d %d",&a,&b); 21 node[a]++; 22 node[b]++; 23 parent[b]=parent[a]; 24 } 25 int ans=0,ok=true; 26 for(int i=1;i<=n;i++){ 27 if(node[i]%2!=0)ans++; 28 } 29 if(ans==0){ 30 int t=parent[1]; 31 for(int i=1;i<=n;i++){ 32 if(parent[i]!=t) 33 ok=false; 34 } 35 } 36 else 37 ok=false; 38 39 if(ok)printf("1 "); 40 else printf("0 "); 41 } 42 }