首页 > 代码库 > 欧拉回路
欧拉回路
思路
根据欧拉图的概念来。
注意
点数为1;
有孤立点;
代码实现
T掉的dfs...
1 #include<cstdio> 2 const int maxn=1e5+10; 3 const int maxm=5e5+10; 4 int t,n,m,s; 5 int a,b; 6 int ld[maxn],cd[maxn],lj[maxn]; 7 int h[maxn],hs=1; 8 int e_s[maxm],e_n[maxm]; 9 bool v[maxm],ans;10 void dfs(int k,int step){11 if(step>m){ans=1;return;}12 for(int i=h[k];i;i=e_n[i])13 if(!v[i]){14 lj[step]=i;15 v[i]=1;16 if(t==1) v[i^1]=1;17 dfs(e_s[i],step+1);18 v[i]=0;19 if(t==1) v[i^1]=0;20 if(ans) return;21 }22 }23 int main(){24 scanf("%d%d%d",&t,&n,&m);25 if(n==1){puts("YES");return 0;}26 for(int i=1;i<=m;i++){27 scanf("%d%d",&a,&b);28 ++hs,e_s[hs]=b,e_n[hs]=h[a],h[a]=hs,++cd[a],++ld[b];29 if(t==1) ++hs,e_s[hs]=a,e_n[hs]=h[b],h[b]=hs,++cd[b],++ld[a];30 }31 for(int i=1;i<=n;i++){32 if((ld[i]&1&&t==1)||(ld[i]!=cd[i]&&t==2)){puts("NO");return 0;}33 if(cd[i]) s=i;34 }35 puts("YES");36 dfs(s,1);37 for(int i=1;i<=m;i++){38 if(t==1){39 if(lj[i]&1) putchar(‘-‘);40 printf("%d",lj[i]>>1);41 }42 if(t==2) printf("%d",lj[i]-1);43 if(i!=m) putchar(‘ ‘);44 }45 putchar(‘\n‘);46 return 0;47 }
留个弗洛来算法的坑。
欧拉回路
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。