标签:练习题 MOOC int father 回路 bx Find 欧拉
7:欧拉回路
http://dsalgo.openjudge.cn/graph/7/
- 描述
-
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路
给定一个无向图,请判断该图是否存在欧拉回路
- 输入
- 输入数据包含若干测试用例
每个测试用例的第一行是两个正整数,分别表示图的节点数N(1 < N < 1000)和边数M
随后的M行对应M条边,每行有两个正整数,分别表示这条边上的两个节点的编号(节点编号从1到N)
当N为0时输入结束 - 输出
- 每个测试用例的输出占一行,若存在欧拉回路则输出1,否则输出0
- 样例输入
-
3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
- 样例输出
-
1 0
emmmmm,犯了一个很傻逼的错了
C++代码:
#include<iostream> #include<stdio.h> using namespace std; const int maxn = 1010; int n,m; int father[maxn]; int node[maxn]; int Find(int a){ while(a != father[a]){ father[a] = father[father[a]]; a = father[a]; } return a; } void Union(int a,int b){ int ax = Find(a); int bx = Find(b); if(ax != bx) father[ax] = bx; } int main(){ while(cin>>n){ if(n == 0) break; cin>>m; for(int i = 1; i <= n; i++){ father[i] = i; node[i] = 0; } int x,y; for(int i = 1;i <= m; i++){ cin>>x>>y; node[x]++; node[y]++; Union(x,y); } int cnt = 0; int flag = 1; int cnt1 = 0; for(int i = 1; i <= n; i++){ //要认真啊啊啊,i <= n 不是 i <= m..... if(father[i] == i){ cnt++; if(cnt == 2) flag = 0; } if(node[i] & 1) cnt1++; } if(cnt1 != 0) flag = 0; if(flag) cout<<1<<endl; else cout<<0<<endl; } return 0; }
标签:练习题,MOOC,int,father,回路,bx,Find,欧拉 来源: https://www.cnblogs.com/Weixu-Liu/p/10920376.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。