判断一个连通图无向图是否存在欧拉回路的条件: 无奇度的节点
判断是不是连通图,可以用并查集
判断节点是不是奇度可以开一个数组记录。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=1010; int ff[maxn],father[maxn],summ[maxn]; int n,m; int find(int x) { if(x!=father[x]) father[x]=find(father[x]); return father[x]; } int main() { int i,u,v; while(~scanf("%d",&n)) { if(n==0) break; scanf("%d",&m); for(i=0;i<=n;i++) father[i]=i; memset(ff,0,sizeof(ff)); memset(summ,0,sizeof(summ)); for(i=0;i<m;i++) { scanf("%d%d",&u,&v); summ[u]++;summ[v]++; int fu=find(u); int fv=find(v); if(fu!=fv) father[fu]=fv; } for(i=1;i<=n;i++){int yy=find(i);ff[yy]=1;} int tott=0,jieguo=0; for(i=1;i<=n;i++) if(ff[i]==1) tott++; for(i=1;i<=n;i++) if(summ[i]%2==1) {jieguo=1;break;} if(tott!=1) jieguo=1; if(jieguo==1) printf("0 "); else printf("1 "); } return 0; }