zoukankan      html  css  js  c++  java
  • 图论·欧拉迹

    欧拉路径或者欧拉回路都要求经过给定图$G$中所有边恰好一次,在此之上欧拉回路还要求路径是闭合的,即能找到一条从某点出发并以此点为终点的欧拉路径。二者均称为欧拉迹。对于无向图,存在欧拉迹当且仅当图中度数为奇数的结点数目为$0$或$2$。如果图$G$中所有结点度数均为偶数,那么图中的所有欧拉迹均为欧拉回路;而如果度数为奇数的结点数目恰好为$2$,则图中所有欧拉迹均为非闭合的欧拉路径。

    下面给出一些摘自wiki关于欧拉迹的性质:

    • 一个无向图能够被分解成若干个边集互不相交的环当且仅当图中所有结点度数均为偶数当且仅当图存在欧拉回路。
    • 一个有向图存在欧拉回路当且仅当图中所有结点出度入度均相等。
    • 一个有向图存在欧拉路径当且仅当图中至多存在一个出度比入度大$1$的结点,至多存在一个入度比出度大$1$的结点,其余结点出入度均相等

    给出找出无向图$G$中欧拉回路的Hierholzer算法(线性时间复杂度):

    • 任选一个起点,从该点选择为访问的边到达下一个结点,可以断定在返回起点之前不会被阻塞,因为结点的度数为偶数,但不能确定访问所有边。
    • 从以上路径中任意邻接边为被全部访问的结点执行同样操作,得到另一个环,与上一个环合并,持续此操作至所有边均被访问。

    此外用的比较多的是fleury算法:

    • 维护一个栈,开始时将任一个结点压栈,从这个结点开始进行dfs,每访问一个边就将其删除,如果我们在某个点没有可选边,说明之前删除了某条桥,弹栈至重新可继续此操作
    • 弹栈序列即为一条欧拉回路
  • 相关阅读:
    MY_0003:设置界面显示单位
    H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改
    H5_0023:html页面禁止放大缩小页面
    MY_0002:导出单位设置
    MY_0001:添加命令到自定义工具栏
    H5_0020:判断安卓苹果平台
    Web_0003:关于PHP上传文件大小的限制
    H5_0019:JS中定义json结构
    H5_0018:z-index失效的原因
    H5_0017:通过元素自定义属性值获取元素对象,并获取属性值
  • 原文地址:https://www.cnblogs.com/astoninfer/p/5755132.html
Copyright © 2011-2022 走看看