<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>欧拉回路 on Zirnc's Blog</title><link>https://blog.chungzh.cn/blog/%E6%AC%A7%E6%8B%89%E5%9B%9E%E8%B7%AF/</link><description>Recent content in 欧拉回路 on Zirnc's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 25 Mar 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.chungzh.cn/blog/%E6%AC%A7%E6%8B%89%E5%9B%9E%E8%B7%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>欧拉回路笔记</title><link>https://blog.chungzh.cn/oi-history/euler-graph/</link><pubDate>Sat, 25 Mar 2023 00:00:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/euler-graph/</guid><description>定义 欧拉回路：通过图中每条边恰好一次的回路 欧拉通路（欧拉路径）：通过图中每条边恰好一次的通路 欧拉图：具有欧拉回路的图 半欧拉图：具有欧拉通路但不具有欧拉回路的图 判定 无向图是欧拉图当且仅当： 非零度顶点是连通的 顶点的度数都是偶数 无向图是半欧拉图当且仅当： 非零度顶点是连通的 恰有 0 或 2 个奇度顶点 有向图是欧拉图当且仅当： 非零度顶点是强连通的 每个顶点的入度和出度相等 有向图是半欧拉图当且仅当： 非零度顶点是弱连通的 至多一个顶点的出度与入度之差为 1 至多一个顶点的入度与出度之差为 1 其他顶点的入度和出度相等 弱连通：将所有有向边替换为无向边后，整张图连通。
Hierholzer 算法 Hierholzer 算法的具体步骤：遍历当前节点的所有出边，并 DFS 访问相邻顶点，将经过的边删掉。遍历完所有出边后，将 $u$ 加入栈中。最后把栈中的顶点反过来，再输出，就是欧拉回路。
如果要求字典序最小，只需在一开始对每个点的所有出边从小到大排序。这样一来，欧拉回路上从左往右看，每个点的后继都取到了理论最小值。
对于无向图和有向图的欧拉路径，必须从奇点或唯一的出度比入度大 1 的点开始 dfs。
Luogu-P7771 【模板】欧拉路径
实现时，要注意一个小细节：用 hd[x] 数组记录节点 $x$ 目前删到了哪条边，每次走过一条边时要 hd[x]++，然后下次到达这个点时再调用这个值。否则的话，每次到了这个点都要从 0 开始判断这些边是否被删除掉，会超时。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include &amp;lt;bits/stdc++.</description></item></channel></rss>