C++ 解决经典哥尼斯堡七桥问题
7-32 哥尼斯堡的“七桥问题” (25 point(s))
哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。
可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。
这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个无向图,问是否存在欧拉回路?
输入格式:
输入第一行给出两个正整数,分别是节点数N (1≤N≤1000)和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。
输出格式:
若欧拉回路存在则输出1,否则输出0。
输入样例1:
6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6
输出样例1:
1
输入样例2:
5 8
1 2
1 3
2 3
2 4
2 5
5 3
5 4
3 4
输出样例2:
0
欧拉回路是遍历图中的所有边。
给定一个图存在欧拉回路的充要条件是图为一个连通图,且每个点的度数(发出的边为偶数)
判断一个图为连通图可以用DFS的方法判断,也可以用并查集来判断。这里给一个代码
#include <iostream>
class UnionFind {
private:int* parent;int count;int* rank; // rank[i]表示以i为根集合的层数
public:UnionFind(int count_) {parent = new int[count_];rank = new int[count_];this->count = count_;for (int i = 0; i < count_; i++) {parent[i] = i;rank[i] = 1;}}~UnionFind() {delete[] parent;delete[] rank;}int find(int p) {//assert(p >= 0 && p < count);while (p != parent[p]) {parent[p] = parent[parent[p]];p = parent[p];}return p;}bool isConnected(int p, int q) {return find(p) == find(q);}void unionElements(int p, int q) {int pRoot = find(p);int qRoot = find(q);if (pRoot == qRoot)return;if (rank[pRoot] < rank[qRoot])parent[pRoot] = qRoot;else if (rank[qRoot] < rank[pRoot])parent[qRoot] = pRoot;else {parent[pRoot] = qRoot;rank[qRoot]++;}count--;}int size() {return count;}};bool HasEulerCircuit(UnionFind & Union, int degree[], int V) {if (Union.size()-1!= 1)return false;for (int i = 0; i < V; i++) {if (degree[i] % 2)return false;}return true;
}int main()
{int V, E, V1, V2;int degree[1010] = { 0 };std::cin >> V >> E;UnionFind Union = UnionFind(V+1);for (int i = 0; i < E; i++) {std::cin >> V1 >> V2;Union.unionElements(V1, V2);degree[V1]++;degree[V2]++;}if (HasEulerCircuit(Union, degree, V))std::cout << 1 << std::endl;elsestd::cout << 0 << std::endl;
}
C++ 解决经典哥尼斯堡七桥问题相关推荐
- 欧拉如何解决哥尼斯堡七桥问题(二)
上一讲欧拉已经证明哥尼斯堡七桥问题不存在每座桥只走一次的走法.但是这里有一个特殊情况,即A.B.C.D每个地区恰巧都有奇数个桥连通.欧拉当然也想到了如果存在偶数桥,及任意数量的河和桥图是否存在每座桥只 ...
- 哥尼斯堡七桥问题用计算机,哥尼斯堡七桥问题解法真的解不出来?请尽快解答.急...
十八世纪,东普鲁士的首府哥尼斯堡是一座景色迷人的城市,普莱格尔河横贯城区,使这 座城市锦上添花,显得更加风光旖旋.这条河有两条支流,在城中心汇成大河,在河的 中央有一座美丽的小岛.河上有七座各具特色的 ...
- 图解图论介绍及应用(1):哥尼斯堡七桥
点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Vardan Grigoryan 编译:ronghuaiyang 导读 知 ...
- 图论入门六:哥尼斯堡七桥问题
转载自https://blog.csdn.net/saltriver/article/details/54585595 哥尼斯堡七桥问题: 1736年,年仅29岁的数学家欧拉来到普鲁士的古城哥尼斯堡( ...
- 七桥问题在计算机领域的应用,哥尼斯堡七桥问题在高考中应用
摘 要:在数学教学和学习过程中把抽象.概括和具体化结合起来是非常重要的.哥尼斯堡七桥问题就是很好的一个例子. 关键词:哥尼斯堡七桥 一笔画 抽象 18世纪,东普鲁士哥尼斯堡有条普莱格尔河,这条河有两个 ...
- 欧拉如何解决哥尼斯堡七桥问题(一)
解决问题的方法有两种,一种是学习并利用他人的研究成果去解决一些问题,一种是通过自己思考发现 问题的解决方法并解决问题.最近我国被各种卡脖子的问题所困扰,毫不客气的说我们解决大部分问题都是 采用第一种, ...
- 世界数学难题——哥尼斯堡七桥问题 哥尼斯堡七桥问题
七桥问题 七桥问题Seven Bridges Problem 18世纪著名古典数学问题之一.在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来(如图).问是否可能从这四块陆地中任一 ...
- 哥尼斯堡七桥——Euler欧拉定理证明
昨天和同学复习图论,深入讨论了欧拉定理,有了相对透彻的理解,我希望写下来,我的博客就是我的笔记本,记录学习的点点滴滴而已. 定理5.1 设G为非空连通图,则G为 Euler图 <=> ...
- 图论的起源:柯尼斯堡七桥(一笔画)问题与欧拉路径/回路
柯尼斯堡七桥问题 大数学家欧拉一生中的大部分时间在俄国和普鲁士度过.1735年,他提出了著名的柯尼斯堡七桥(Seven Bridges of Königsberg)问题: 柯尼斯堡(今俄罗斯加里宁格勒 ...
- 案例6-1.3 哥尼斯堡的“七桥问题”
题目 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-1783)最终解决了这个问题,并由此创立了拓扑学.这个问题如今可以描述为判断欧拉回路是否存在的问 ...
最新文章
- C#调用控制面板选项
- Vue+Element-ui+二级联动封装组件
- Varnish3.0中文入门教程-应用篇2
- android sliding tab,android – 刷新SlidingTabLayout
- js面向对象开发互联网机顶盒应用头端之四
- Spring注解大全(示例详解)
- 【重复制造精讲】2、主数据介绍
- U3D协程Coroutine之WWW与Update()的并行测试
- windows剪切板暂存
- URP中的2D Light光照在移动端不生效的问题
- 如何编写有效的接口测试?
- TensorFlow 2 Object Detection API 教程: model 命名规则
- OpenCV-通道合并cv::merge
- Lc5-最长回文字串
- java正则匹配买火车票_matlab的正则表达式
- 学习webbench需要掌握的基础知识(webbench源代码学习心得)
- 棋牌搭建,APP新手教程
- 记一次App异常kill分析处理
- RestCloud API接口管理平台
- python里2f是啥意思_Python 字符串前面加u,r,b,f的含义