C++ 图论算法之欧拉路径、欧拉回路算法(一笔画完) 您所在的位置:网站首页 一笔画完所有线段怎么画 C++ 图论算法之欧拉路径、欧拉回路算法(一笔画完)

C++ 图论算法之欧拉路径、欧拉回路算法(一笔画完)

2024-07-10 13:25| 来源: 网络整理| 查看: 265

公众号:编程驿站

1. 欧拉图

本文从哥尼斯堡七桥的故事说起。

哥尼斯堡城有一条横贯全市的普雷格尔河,河中的两个岛与两岸用七座桥连结起来。当时那里的居民热衷于一个话题:怎样不重复地走遍七桥,最后回到出发点。这也是经典的一笔画完问题。

1736年瑞士数学家欧拉(Euler)发表了论文《哥尼斯堡七桥问题》。论文中使用图论理论解决哥尼斯堡七桥问题,欧拉图由此而来。论文中欧拉证明了如下定理:一个非空连通图当且仅当每个顶点的度数都是偶数时才会是欧拉图。

欧拉图的几个概念:

欧拉回路:指在图(无向图或有向图)中,经过图中所有边且只经过边一次所形成的回路,称为欧拉回路。具有欧拉回路的图称为欧拉图。如下图结构为欧拉图,从1号节点出发,经过所有边后可以重回到1号节点。

1.png

欧拉路径:指通过图中每条边且仅通过一次形成的路径(没有环)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。如下图,从6号节点出发,可以经过每一条边后到达2号节点,存在欧拉路径,只能说是半欧拉图。

2.png

欧拉图的性质:

欧拉图中所有顶点的度数都是偶数。也就是说,图中存在欧拉回路的充要条件是图中每个结点都是偶节点(连接该节点的边的数量为偶数)。

因为欧拉回路定义只能经过每条边一次,所以,对于每一个节点,至少需要有 2n(n=0,1……) 条边连接该节点。

论证:当 n = 0时,图结构中只含有一个节点v,边数为0,图论中认为自己和自己是能构建成回路的。所以当n=0时,图是欧拉图。

当n>=1时,如果从一个节点出发,经过一个路径后,能够重新回来。相当于一个人要和其他人围成一个圈,每个人必须伸出两只手,否则是不可能形成圈的。故每个节点都连接有2n(n = 0,1,2,...n)条边。

欧拉路径中奇节点(连接该节点的边的数量为奇数)的个数为0或2。若奇节点的个数为0,则图中存在欧拉回路,欧拉回路也是欧拉路径的一种。把欧拉回路变成欧拉路径,只需要抽取出环中的一条边。因为欧拉环的充要条件是节点度数有偶数,抽取出一条边后,会让原来连接边两端的节



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有