- 题目都告诉你这是欧拉回路了......
- 判断图中是否存在欧拉回路,欧拉回路存在的两个充分条件: 1.连通图 2.图中奇点(点的度是奇数)不存在。
开始我想记录不重复的边的个数cnt,因为无向图是连通图的话cnt>=n-1,燃鹅,我错了T^T
一个无向图 G=(V,E) 是连通的,那么边的数目大于等于顶点的数目减一:|E|>=|V|-1,而反之不成立。
反之不成立……OH!!!
- CODE:
#include<cstdio> #include<cstring> using namespace std; const int maxn = 1000+10; int degree[maxn]; int G[maxn][maxn]; int vis[maxn]; int n,m; void init(){ memset(degree,0,sizeof(degree)); memset(G,0,sizeof(G)); memset(vis,0,sizeof(vis)); } void euler(int u){ vis[u]=1; for(int v=1;v<=n;v++){ if(G[u][v] && G[v][u] && !vis[v]){ vis[v]=1; euler(v); } } } int main(){ int a,b; while(scanf("%d",&n) && n){ scanf("%d",&m); init(); for(int i=0;i<m;i++){ scanf("%d%d",&a,&b); G[a][b]=G[b][a]=1; degree[a]++; degree[b]++; } euler(1); bool ok=true; for(int i=1;i<=n;i++) if(degree[i]%2!=0 || vis[i]==0){ ok=false; break; } if( ok ) printf("1\n"); else printf("0\n"); } }