在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】欧拉回路的判定相关推荐

  1. 欧拉通路 java,欧拉回路

    基本概念及定理 1. 欧拉通路.欧拉回路.欧拉图 无向图: 1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为 ...

  2. java hdu2012素数判定

    素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. 软件测试java三角形形状判定,java,三角形判定测试报告.doc.doc

    java,三角形判定测试报告.doc java,三角形判定测试报告.doc 测试三角形类型判断程序 测试三角形类型判断程序 软件121 金凯 1102052019 一.实验题目 测试三角形类型判断程序 ...

  4. java 1029: 三角形判定

    1029: 三角形判定 时间限制: 1 Sec  内存限制: 30 MB 提交: 52446  解决: 29423 [状态] [讨论版] [提交] [命题人:admin] 题目描述 给你三个正整数,判 ...

  5. POJ 1300 Door Man(欧拉回路的判定)

    题目链接 题意 : 庄园有很多房间,编号从0到n-1,能否找到一条路径经过所有开着的门,并且使得通过门之后就把门关上,关上的再也不打开,最后能回到编号为0的房间. 思路 : 这就是一个赤裸裸的判断欧拉 ...

  6. 软件测试java三角形形状判定,软件测试技术基础实验——Junit 安装与 三角形问题的测试...

    在学习了基本的软件测试技术之后,我们终于要进行最简单的实战演练了.第一次上机,来看看我们是如何安装Junit,Hamcrest和Eclemma的. 一.安装Junit(4.12)和Hamcrest(1 ...

  7. java五子棋胜负判定_五子棋java程序的判断胜负的方法

    我有这样一段程序:importjava.awt.*;importjava.awt.event.*;importjava.util.*;classFiveChessextendsCanvas{Linke ...

  8. java五子棋胜负判定_五子棋的判断输赢规则—Java编程(简单优化完整版)

    1 public boolean isWon2(int x, int y, char color) { 2         int count = 1;      //本身一点为 1 3       ...

  9. 【程序设计】Java扑克顺子判定的设计与实现

    文章目录 题目要求 程序设计 实现代码 题目要求 斗地主中顺子是一种出牌牌型,分为单顺子和双顺子. 单顺子包含五张或更多连续的单牌,不包括2和大小王,例如:单3+单4+单5+单6+单7. 双顺子,也称 ...

最新文章

  1. C语言实现RC4序列密码
  2. 冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)
  3. 收集下阿里集团下的技术BLOG
  4. Linux运维工程师必学必备的8项IT技能
  5. ITK:遍历图像的线
  6. [css] css怎么更改表单的单选框或下拉框的默认样式?
  7. input只能输入数字_Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧...
  8. struts国际化java_Struts2 的国际化实现方式示例
  9. 利用sklearn进行特征选择
  10. linux 如何添加用户,Linux 怎么添加用户(adduser)
  11. 【最新】报表开发工具-->FineBI安装与启动---Windows
  12. SFDC 基本知识网络图
  13. 视频直播源码_直播平台搭建_直播程序源码——技术架构解析
  14. css_transition_animation(内含贝赛尔曲线详解)
  15. oraclenbsp;level关键字
  16. 智能工厂——实现智能制造的关键要素之一
  17. NYOJ:458-小光棍数
  18. ADC( 数模转换器 )
  19. 我在北上深杭,挺好的
  20. 【安全架构】COBIT vs TOGAF:哪个对网络安全更有利?

热门文章

  1. 微信企业号-根据code获取成员信息(过期code)
  2. sed 解释正则表达式
  3. linux用grep查找包含两个关键字的命令
  4. shell中的expect命令
  5. oracle死锁的解决方法
  6. 编码是件有逻辑的事情
  7. adb 静默安装_怎么实现Android APP静默安装
  8. mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件
  9. 数据字典在sga的哪一个组件中缓存_非功能性约束之性能(1)-性能银弹:缓存...
  10. kafka消息消费有延迟_RabbitMQ与Kafka的技术差异以及使用注意点