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


    一笔画与中国邮递员问题

    在这里插入图片描述

    一、引述

    一笔画问题:

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

    欧拉图(Euler graph):

    • 从任何节点开始,都可以一笔画

    • 每一个节点都是偶数价(价数指的是从该节点能够伸出去的边的数目)

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

    半欧拉图(semi-Eulerian graph):

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

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

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

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

    实例分析

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

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

    a.半欧拉图

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

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

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

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

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

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

    d.画一个两个节点的图,要求其既不是欧拉图也不是半欧拉图
    在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    更复杂的例子:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69IV7rmI-1658797650813)(imgs/image-20220726084400181.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
    
    • 1
    • 2
    • 3

    于是敲定补边AG和EF

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMyEliL2-1658797650814)(imgs/image-20220726085616270.png)]
    这样选择以AF两个点作为始终点,将EG两点的边作为补边重复走,即可使总代价最少。

  • 相关阅读:
    【python】超类简介__new__和__init__
    [附源码]java毕业设计望湘人电子商城
    数据库分类,市场上常见数据库
    第十一章《Java实战常用类》第7节:Objects类
    IDEA 2023搭建 SpringMVC +FreeMarker+JDBC
    appinventor多个拓展导入导致编译出错:
    vue--后台管理系统问题和功能实现思路集锦
    区块链:去中心化革命下的创新与发展!
    聚焦新一代技术平台,智能低代码平台成为新趋势
    Oracle和MySQL简介及比较:选择合适的数据库
  • 原文地址:https://blog.csdn.net/qq_38853759/article/details/125987470