• 判断欧拉回路是否存在的方法


    原文链接:http://blog.sina.com.cn/s/blog_63509b890100rev7.html

    正文:
    判断一个图中是否存在欧拉回路(每条边恰好只走一次,并能回到出发点的路径),在以下三种情况中有三种不同的算法:

    一、无向图
    每个顶点的度数都是偶数,则存在欧拉回路。

    二、有向图(所有边都是单向的)
    每个节顶点的入度都等于出度,则存在欧拉回路。

    以上两种情况都很好理解。其原理就是每个顶点都要能进去多少次就能出来多少次。

    三、混合图(有的边是单向的,有的边是无向的。常被用于比喻城市里的交通网络,有的路是单行道,有的路是双行道。)
    找到一个给每条无向的边定向的策略,使得每个顶点的入度等于出度,这样就能转换成上面第二种情况。这就可以转化成一个二部图最大匹配问题。网络模型如下:

    1. 新建一个图。
    2. 对于原图中每一条无向边i,在新图中建一个顶点e(i);
    3. 对于原图中每一个顶点j,在新图中建一个顶点v(j)。
    4. 如果在原图中,顶点j和k之间有一条无向边i,那么在新图中从e(i)出发,添加两条边,分别连向v(j)和v(k),容量都是1。
    5. 在新图中,从源点向所有e(i)都连一条容量为1的边。
    6. 对于原图中每一个顶点j,它原本都有一个入度in、出度out和无向度un。显然我们的目的是要把所有无向度都变成入度或出度,从而使它的入度等于总度数的一半,也就是(in + out + un) / 2(显然与此同时出度也是总度数的一半,如果总度数是偶数的话)。当然,如果in已经大于总度数的一半,或者总度数是奇数,那么欧拉回路肯定不存大。如果in小于总度数的一半,并且总度数是偶数,那么我们在新图中从v(j)到汇点连一条边,容量就是(in + out + un) / 2 – in,也就是原图中顶点j还需要多少入度。

    按照这个网络模型算出一个最大流,如果每条从v(j)到汇点的边都达到满流量的话,那么欧拉回路成立。

  • 相关阅读:
    Apache TomEE 入门指南
    Windows 7运行命令大全
    hibernate hql 大全
    maven常用命令
    php编译安装php-5.6
    nginx编译安装
    apache通过AD验证
    apache编译安装 httpd 2.2 httpd 2.4
    DC 辅域转主域
    tomcat安装配置
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9514199.html
Copyright © 2020-2023  润新知