判断欧拉路是否存在的方法
有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。
无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。
判断欧拉回路是否存在的方法
有向图:图连通,所有的顶点出度=入度。
无向图:图连通,所有顶点都是偶数度。
#include"stdio.h" #include<string.h> int link[1010],f[1010]; int find(int a) { if(a!=f[a]) f[a]=find(f[a]); return f[a]; } int main() { int i,n,m,flag,a,b,x,y; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) f[i]=i; memset(link,0,sizeof(link)); scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d",&a,&b); link[a]++; link[b]++; x=find(a);y=find(b); if(x!=y) f[x]=y; } flag=find(f[1]); for(i=2;i<=n;i++) { if(find(i)!=flag) break; } if(i<=n){puts("0");continue;} for(i=1;i<=n;i++) { if(link[i]%2!=0) break; } if(i<=n)puts("0"); else puts("1"); } return 0; }