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

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

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

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

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

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

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

    • 维护一个栈,开始时将任一个结点压栈,从这个结点开始进行dfs,每访问一个边就将其删除,如果我们在某个点没有可选边,说明之前删除了某条桥,弹栈至重新可继续此操作
    • 弹栈序列即为一条欧拉回路
  • 相关阅读:
    Windows文件操作的直接函数调用
    随笔
    XML的四种解析器原理及性能比较
    TVirtualStringTree的图标状态重叠
    使用代码控制TVirtualStringTree的选项
    c 与 c++中的time相关函数
    0x08标志类型的RTMPE、RTMPTE协议分析
    小小的高兴一下
    Scaleform GFx
    delphi类的相互引用
  • 原文地址:https://www.cnblogs.com/astoninfer/p/5755132.html
Copyright © 2011-2022 走看看