欧拉回路的判断:
1、若有一个节点的度为奇数,则不能构成欧拉回路;
2、判断所有点是否可以一笔通过并回到起点。
#include<iostream> using namespace std; #define N 1005 int deg[N]; //每个节点的度 bool vis[N]; int map[N][N]; bool DegValid(int n) { for(int i=1;i<=n;i++) if(deg[i]&1) return false; return true; } void DfsCircle(int s,int n) { int i; vis[s]=true; for(i=1;i<=n;i++) { if(map[s][i] && !vis[map[s][i]]) DfsCircle(i,n); } } int main() { int n,m; int a ,b,i; bool f; while(cin>>n>>m &&n) { memset(deg,0,sizeof(deg)); memset(vis,0,sizeof(vis)); memset(map,0,sizeof(map)); for(i=1;i<=m;i++) { cin>>a>>b; deg[a]++; deg[b]++; map[a][b]=map[b][a]=i; } if(!DegValid(n)) cout<<"0"<<endl; else { DfsCircle(a,n); f=true; for(i=1;i<=n;i++) if(!vis[i]) { f=false; break; } if(!f) cout<<"0"<<endl; else cout<<"1"<<endl; } } return 0; }
时间: 2024-10-22 23:28:48