首页 > 代码库 > acm1878欧拉回路
acm1878欧拉回路
欧拉回路解释
对于本题我们只要把每个点的度进行记录,判断是否存在奇数度的点,如果是就可以判断不是欧拉回路,如果不是就在一个点出发,进行dfs搜索,
看能否走到起点,因为对于欧拉回路是一个闭合的回路,无论在哪个点出发都应当可以走回起点,所以一次性遍历必将经过每个点,如果出现没有
走过的点,则不是欧拉回路。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int maxn=1200; 5 int degree[maxn]; 6 int vis[maxn]; 7 int maze[maxn][maxn]; 8 int n,m; 9 void dfs(int i)10 {11 vis[i]=1;12 for(int j=1;j<=n;j++)13 {14 if(!vis[j]&&maze[i][j])15 {16 dfs(j);17 }18 }19 return;20 }21 int main()22 {23 24 int a,b;25 while(cin>>n&&n)26 {27 bool flag=false;28 cin>>m;29 memset(degree,0,sizeof(degree));30 memset(maze,0,sizeof(maze));31 memset(vis,0,sizeof(vis));32 for(int i=1;i<=m;i++)33 {34 cin>>a>>b;35 maze[a][b]=maze[b][a]=1;36 degree[a]++;37 degree[b]++;38 }39 for(int i=1;i<=n;i++)40 {41 if(degree[i]%2==1)42 flag=true;43 }44 if(flag)45 {46 cout<<0<<endl;47 continue;48 }49 int p=0;50 for(int i=1;i<=n;i++)51 {52 if(!vis[i])53 {54 p++;55 dfs(i);56 }57 }58 if(p==1)cout<<1<<endl;59 else cout<<0<<endl; 60 }61 return 0;62 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。