欧拉回路、混合图的欧拉回路
欧拉回路
从一个点开始把图中的边恰好经过一次,再回到出发点,这样的路径就是欧拉回路。
如图就是一个欧拉回路
欧拉回路判定
不过怎么样的图中才存在欧拉回路呢?
欧拉回路分有向图和无向图两种:
- 有向图: 图中所有点的入度等于出度
- 无向图: 图中所有点的度数都为偶数
这还是很好理解的,不过你可能要问,怎么知道一个混合图中有没有欧拉回路呢?
混合图的欧拉回路
过程:
- 先将无向边随意定向
- 判断每个点的入度和出度是不是同奇偶,不同则无解
- 用一个超级原点向出度小于入度的点连一条容量为 \({|入度-出度| \over 2}\) 的边
用一个超级汇点向出度大于入度的点连一条容量为 \({|入度-出度| \over 2}\) 的边 - 将原图无向边的另一个方向边连到图中,容量为 1
- 跑最大流,判断与 S 相连的边是否满流,满流则有解
PS:其实也十分好理解,其实就是将原来无向边的方向进行调整,使得每个点的入度等于出度。每个点需要调整 \({|入度-出度| \over 2}\) 次,所以边的容量为 \({|入度-出度| \over 2}\)。
当我们流过一条边的时候,两条边容量各减一,就相当于把边调整的过程。