欧拉回路、混合图的欧拉回路

欧拉回路

从一个点开始把图中的边恰好经过一次,再回到出发点,这样的路径就是欧拉回路。

欧拉回路、混合图的欧拉回路_第1张图片

如图就是一个欧拉回路

欧拉回路判定

不过怎么样的图中才存在欧拉回路呢?

欧拉回路分有向图和无向图两种:

  1. 有向图: 图中所有点的入度等于出度
  2. 无向图: 图中所有点的度数都为偶数

这还是很好理解的,不过你可能要问,怎么知道一个混合图中有没有欧拉回路呢?

混合图的欧拉回路

过程:

  1. 先将无向边随意定向
  2. 判断每个点的入度和出度是不是同奇偶,不同则无解
  3. 用一个超级原点向出度小于入度的点连一条容量为 ∣ 入 度 − 出 度 ∣ 2 {|入度-出度| \over 2} 2 的边
    用一个超级汇点向出度大于入度的点连一条容量为 ∣ 入 度 − 出 度 ∣ 2 {|入度-出度| \over 2} 2 的边
  4. 将原图无向边的另一个方向边连到图中,容量为 1
  5. 跑最大流,判断与 S 相连的边是否满流,满流则有解

PS:其实也十分好理解,其实就是将原来无向边的方向进行调整,使得每个点的入度等于出度。每个点需要调整 ∣ 入 度 − 出 度 ∣ 2 {|入度-出度| \over 2} 2 次,所以边的容量为 ∣ 入 度 − 出 度 ∣ 2 {|入度-出度| \over 2} 2
当我们流过一条边的时候,两条边容量各减一,就相当于把边调整的过程。

你可能感兴趣的:(算法学习)