首页 > 代码库 > 欧拉回路
欧拉回路
求欧拉回路dfs代码:
#include <cstdio>#include <iostream>using namespace std;int n,m,dis[101],dis_=0,root=0x7fffffff,path[10001],now=0;bool map[101][101],ok=false,if_[101];void euler(int now,int gra){ path[gra]=now; if(gra==m+1) { ok=true; return ; } for(int i=1;i<=n;i++) { if(map[now][i]) { map[now][i]=false; map[i][now]=false; euler(i,gra+1); if(ok) return; map[now][i]=true; map[i][now]=true; } }}void euler_back(int now,int gra){ path[gra]=now; if(gra==m+1) { if(now==root) ok=true; return ; } for(int i=1;i<=n;i++) { if(map[now][i]&&!if_[i]) { map[now][i]=false; map[i][now]=false; euler_back(i,gra+1); if(ok) return; map[i][now]=true; map[now][i]=true; } }}int main(){ scanf("%d%d",&n,&m); int from,to; for(int i=1;i<=m;i++) { scanf("%d%d",&from,&to); map[from][to]=true; map[to][from]=true; dis[from]++,dis[to]++; } for(int i=1;i<=n;i++) { if(dis[i]%2) { root=min(i,root); dis_++; } } if(dis_==2) { if_[root]=true; euler(root,1); if(ok) { cout<<"true 1"<<endl; for(int i=1;i<=m;i++) cout<<path[i]<<‘ ‘; } else cout<<"false"<<endl; cout<<endl; } else { if(!dis_) { euler_back(1,1); if(ok) { cout<<"true 2"<<endl; for(int i=1;i<=m;i++) cout<<path[i]<<" "; } else cout<<"false"; cout<<endl; } else { cout<<"false"<<endl; } } return 0;}
欧拉回路
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。