定义
-
欧拉路径
如果图中的一个路径包括每个边恰好一次: 则该路径称为欧拉路径, 。 -
欧拉回路
首尾相接的欧拉路径被称为欧拉回路: 。
判定
由于每一条边都要经过恰好一次
-
一个无向图存在欧拉回路
当且仅当该图所有顶点度数都为偶数, 且该图只有一个存在边的连通块, 。 -
一个无向图存在欧拉路径
当且仅当该图中奇点的数量为 $0$ 或 $2$ 且该图只有一个存在边的连通块, 。 -
一个有向图存在欧拉回路
当且仅当所有点的入度等于出度, 。 -
一个混合图存在欧拉回路
当且仅当存在一个对所有无向边定向的方案, 使得所有点的入度等于出度, 求解需要用到网络流相关算法。 。
求解
一般使用 $\rm dfs$ 算法求出一张图的欧拉回路
给每一条边记一个 $\rm vis$ 数组
直接 $\rm dfs$ 的话可能会有一些点无法被遍历到
由于只需要将图遍历一遍
参考代码
void dfs (int u) {
for (int i = last[u]; i; i = Next[i]) {
if (vis[i]) continue;
vis[i] = true;
int record = i;
dfs(to[i]);
Sta[++top] = record;
}
}