【Java】欧拉回路的判定
在18世纪,东普鲁士哥尼斯堡有一条大河,河中有两个小岛。全城被大河分割成四块陆地,河上架有七座桥,把四块陆地联系起来(如图)。当时许多市民都在思索一个问题:一个散步者能否从某一陆地出发,不重复地经过每座桥一次,最后回到原来的出发地。
七桥问题:
这就是历史上有名的哥尼斯堡七桥问题。
这个问题似乎不难解决,所以吸引了许多人来尝试,但是日复一日谁也没有得出肯定的答案。于是有人便写信求教当时著名的数学家欧拉(1707~1783)。欧拉毕竟是数学家,他并没有去重复人们已失败了多次的试验,而是产生了一种直觉的猜想:人们千百次的失败,也许意味着这样的走法根本就不存在。于是欧拉把七桥问题进行了数学的抽象。用A、B、C、D四个点表示四块陆地,用两点间的一条线表示连接两块陆地之间的一座桥,就得到如下图所示的一个由四个点和七条线组成的图形。
于是,七桥问题就转化为一个抽象图形是否可以“一笔画”的问题。
这个一笔画,也是欧拉回路的判定方法是这样的:
- 连通多重图具有欧拉路当且仅当它有0个或2个度数为奇数的结点。
- 连通多重图具有欧拉路但无欧拉回路当且仅当它有2个度数为奇数的结点。
- 连通多重图具有欧拉回路当且仅当它只有度数为偶数的结点。
所以我们依据
欧拉大神tql,下面是对问题的再进一步抽象(用二维数组表示的矩阵):
下面是Java代码实现:
public class EulerCircuit {//定义二维数组实现图储存int[][] mat;//定义顶点个数int vertexNum;//构造函数问题初始化public EulerCircuit(int[][] mat, int vertexNum) {super();this.mat = mat;this.vertexNum = vertexNum;}public int getOddVertexNum() {//累加器记录奇数顶点个数int count = 0;//依次累加每一行元素for (int i = 0; i < vertexNum; i++) {//记录通过顶点i的边数int degree = 0;for (int j = 0; j < vertexNum; j++) {degree += mat[i][j];}//顶点度为奇数时if (degree % 2 != 0) {count++;}}//结束函数,返回奇数顶点个数return count;}public static void main(String[] args) {//七桥问题数组int[][] mat = {{0, 1, 2, 2}, {1, 0, 1, 1}, {2, 1, 0, 0}, {2, 1, 0, 0}};//生成EulerCircuit对象EulerCircuit eulerCircuit = new EulerCircuit(mat, 4);//根据函数获取奇数桥的个数int oddVertexNum = eulerCircuit.getOddVertexNum();if (oddVertexNum == 0) {System.out.println("有欧拉回路");} else {System.out.println("有" + oddVertexNum + "个顶点通奇数桥,无欧拉回路");}}}
如果求欧拉路就可以设置条件判定的分叉点为2
【Java】欧拉回路的判定相关推荐
- 欧拉通路 java,欧拉回路
基本概念及定理 1. 欧拉通路.欧拉回路.欧拉图 无向图: 1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为 ...
- java hdu2012素数判定
素数判定 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 软件测试java三角形形状判定,java,三角形判定测试报告.doc.doc
java,三角形判定测试报告.doc java,三角形判定测试报告.doc 测试三角形类型判断程序 测试三角形类型判断程序 软件121 金凯 1102052019 一.实验题目 测试三角形类型判断程序 ...
- java 1029: 三角形判定
1029: 三角形判定 时间限制: 1 Sec 内存限制: 30 MB 提交: 52446 解决: 29423 [状态] [讨论版] [提交] [命题人:admin] 题目描述 给你三个正整数,判 ...
- POJ 1300 Door Man(欧拉回路的判定)
题目链接 题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间. 思路 : 这就是一个赤裸裸的判断欧拉 ...
- 软件测试java三角形形状判定,软件测试技术基础实验——Junit 安装与 三角形问题的测试...
在学习了基本的软件测试技术之后,我们终于要进行最简单的实战演练了.第一次上机,来看看我们是如何安装Junit,Hamcrest和Eclemma的. 一.安装Junit(4.12)和Hamcrest(1 ...
- java五子棋胜负判定_五子棋java程序的判断胜负的方法
我有这样一段程序:importjava.awt.*;importjava.awt.event.*;importjava.util.*;classFiveChessextendsCanvas{Linke ...
- java五子棋胜负判定_五子棋的判断输赢规则—Java编程(简单优化完整版)
1 public boolean isWon2(int x, int y, char color) { 2 int count = 1; //本身一点为 1 3 ...
- 【程序设计】Java扑克顺子判定的设计与实现
文章目录 题目要求 程序设计 实现代码 题目要求 斗地主中顺子是一种出牌牌型,分为单顺子和双顺子. 单顺子包含五张或更多连续的单牌,不包括2和大小王,例如:单3+单4+单5+单6+单7. 双顺子,也称 ...
最新文章
- C语言实现RC4序列密码
- 冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)
- 收集下阿里集团下的技术BLOG
- Linux运维工程师必学必备的8项IT技能
- ITK:遍历图像的线
- [css] css怎么更改表单的单选框或下拉框的默认样式?
- input只能输入数字_Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧...
- struts国际化java_Struts2 的国际化实现方式示例
- 利用sklearn进行特征选择
- linux 如何添加用户,Linux 怎么添加用户(adduser)
- 【最新】报表开发工具-->FineBI安装与启动---Windows
- SFDC 基本知识网络图
- 视频直播源码_直播平台搭建_直播程序源码——技术架构解析
- css_transition_animation(内含贝赛尔曲线详解)
- oraclenbsp;level关键字
- 智能工厂——实现智能制造的关键要素之一
- NYOJ:458-小光棍数
- ADC( 数模转换器 )
- 我在北上深杭,挺好的
- 【安全架构】COBIT vs TOGAF:哪个对网络安全更有利?
热门文章
- 微信企业号-根据code获取成员信息(过期code)
- sed 解释正则表达式
- linux用grep查找包含两个关键字的命令
- shell中的expect命令
- oracle死锁的解决方法
- 编码是件有逻辑的事情
- adb 静默安装_怎么实现Android APP静默安装
- mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件
- 数据字典在sga的哪一个组件中缓存_非功能性约束之性能(1)-性能银弹:缓存...
- kafka消息消费有延迟_RabbitMQ与Kafka的技术差异以及使用注意点