一笔画问题(中国邮递员问题)

简介: 一笔画问题(中国邮递员问题)

一笔画与中国邮递员问题

2018122814580746.png

一、引述

一笔画问题:

  • 节点可以重复走
  • 边不可以重复走
  • 要求把所有边都走一次

欧拉图(Euler graph):

  • 从任何节点开始,都可以一笔画
  • 每一个节点都是偶数价(价数指的是从该节点能够伸出去的边的数目)

2018122814580746.png

半欧拉图(semi-Eulerian graph):

  • 只有两个节点是奇数价的,其他都是偶数价的

2018122814580746.png

  • 半欧拉图必须从一个奇数价节点开始,到另一个奇数价结束,才可以一笔画。

tip:一笔画问题中,因为途经点必须有进有出,所以途径点必须是偶数价的,由于起点和终点可以只进不出或者只出不进,所以起点和终点可以是奇数价的。

实例分析

例1:确定其为欧拉图、半欧拉图或者不是欧拉图。

2018122814580746.png

a.半欧拉图

2018122814580746.png

b.B-A-F-E-B-C-D-E-C

例2 一个连通图有5个节点,节点的价分别是4,6,3,p,2

a.解释一下为什么图一定不是欧拉图

b.解释一下为什么图必然是半欧拉图

c.求边的数量(用p表示)

d.画一个两个节点的图,要求其既不是欧拉图也不是半欧拉图+

2018122814580746.png

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7Pg0HWG-1658797650807)(imgs/image-20220725205109029.png)]

a.看到有奇数价的节点,必然不是欧拉图

b.由握手引理可知,奇数价的节点个数必然是偶数个,因此p必为奇数,两个奇数价的节点的图为半欧拉图。

c.由握手引理可知,总价数为边数的两倍,反推边数为$ \frac {p+15} {2} $

d.两点无边不连通就不是欧拉或者半欧拉,无论怎么连边都是全欧拉或者半欧拉

注:欧拉图必然是连通图(d引例)

2018122814580746.png

假如不能一笔画,引发了一个问题(中国邮递员问题)

邮局出发,走完每条路,回到邮局

2018122814580746.png

欧拉图的问题是所有路径长加和问题。而半欧拉图则复杂

2018122814580746.png

根据半欧拉图的定义,起点只能选择T或者Q,否则不能一笔画,那么意味着必然有一些路要重走。

解决办法:补成全欧拉图,中国邮递员问题就变成了补最少的路,使原图变成全欧拉图的问题。

握手引理告诉我们,每加一条边,肯定会有两个节点的价数上升一。可以选择补S到T和S到Q的边来使得图变成全欧拉。

2018122814580746.png

补的这两条边就是邮递员要重走的边,这样就能让中国邮递员从邮局出发最后返回邮局,代价最小。

为什么选择这两条,而不是其他,补成全欧拉的边的方法不止一种,但是要选择代价最小的,也即既要给T和Q增加价数,又要保证全局路径最短,如何确定?穷举

更复杂的例子:

2018122814580746.png

要求邮局设置点为A,可以发现其奇数价节点的个数为4(A、E、F、G),需要补边来敲定代价最小的重复走的路,组合有AE/FG、AF/EG、AG/EF

代价分别计算为

AE+FG = 26 + 22 =48
AF+EG = 35 + 7 = 42
AG+EF = 19 + 20 = 39

于是敲定补边AG和EF

考虑更复杂的场景:不限定起始和终止点,这样可以把图当作半欧拉图处理,只需要补一条边。

2018122814580746.png

这样选择以AF两个点作为始终点,将EG两点的边作为补边重复走,即可使总代价最少。

相关文章
|
存储 安全 Unix
【Shell 命令集合 文件管理】Linux chmod命令使用教程
【Shell 命令集合 文件管理】Linux chmod命令使用教程
826 0
|
人工智能
【Mixup】探索数据增强技术:深入了解Mixup操作
【Mixup】探索数据增强技术:深入了解Mixup操作
1456 0
|
6月前
|
安全 Windows
修改Windows鼠标滚轮方向
本文介绍了如何在Windows系统中自定义鼠标滚轮方向。通过设备管理器识别鼠标硬件信息,找到对应的注册表项,修改`FlipFlopWheel`键值即可实现滚轮方向反转。操作简单,适用于单/多鼠标用户,提升操作体验。
1061 5
|
机器学习/深度学习 数据采集 供应链
Python实现深度学习模型:智能库存管理系统
【10月更文挑战第5天】 Python实现深度学习模型:智能库存管理系统
1028 9
|
编解码 安全 Android开发
如何修复 Android 和 Windows 不支持视频编解码器的问题?
视频播放时遇到“编解码器不支持”错误(如0xc00d36c4或0xc00d5212)是常见问题,即使文件格式为MP4或MKV。编解码器是编码和解码数据的工具,不同设备和版本支持不同的编解码器。解决方法包括:1) 安装所需编解码器,如K-Lite Codec Pack;2) 使用自带编解码器的第三方播放器,如VLC、KMPlayer等。这些方法能帮助你顺利播放视频。
|
12月前
|
机器学习/深度学习 人工智能 算法
2025年,程序员的黄金时代才刚开始-千万不要错误的以为程序员很多哟-卓伊凡软件行业洞察 前言
2025年,程序员的黄金时代才刚开始-千万不要错误的以为程序员很多哟-卓伊凡软件行业洞察 前言
1220 1
2025年,程序员的黄金时代才刚开始-千万不要错误的以为程序员很多哟-卓伊凡软件行业洞察 前言
|
7月前
|
开发框架 供应链 Linux
Odoo VS ERPNext 如何选择?
ERPNext与Odoo均为开源ERP系统,适用于多种企业管理场景。ERPNext功能全面,支持中文及中国会计本地化,适合对功能和合规性要求较高的企业;Odoo模块丰富、界面友好,社区版适合小型企业或开发者二次开发,企业版则具备更强的定制与本地化能力,适合复杂业务需求。两者各有优势,适用不同企业类型与业务场景。
Odoo VS ERPNext 如何选择?
如何自己搭建一个网站?
通过安装简单的CMS网站管理系统或自助建站系统,快速建立网页。步骤包括域名注册、资料实名制、网站建模、内容修改、SEO配置和上线。网站质量可通过后台更新和维护提升。
577 10
|
监控 测试技术 持续交付
Python 3.x与Python 2.x:不兼容性的深度解析
Python 3.x与Python 2.x之间的不兼容性是一个复杂而重要的问题。尽管迁移可能会带来一些挑战和困难,但考虑到Python 2.x已经停止支持以及Python 3.x带来的诸多改进和优势,迁移是不可避免的。通过了解变化、使用兼容工具、逐步迁移、利用社区资源、编写测试、保持更新、考虑使用Python 3.x的特定功能、重新评估第三方库和框架、备份和版本控制以及测试和部署等策略,你可以成功地将你的代码从Python 2.x迁移到Python 3.x,并享受Python 3.x带来的新功能和改进.
1691 5
|
Linux TensorFlow 算法框架/工具
在Linux上安装其他版本的cmake 或 升级cmake
在Linux上安装其他版本的cmake 或 升级cmake
2280 2