洛谷 U308246:一笔画问题 ← 欧拉回路(dfs 或 bfs)
【题目来源】
【题目描述】
如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。
输入一个无向图,根据一笔画的两个定理,如果寻找欧拉回路,对一号点执行深度优先遍历;找欧拉路,则对最后一个奇点执行 dfs,时间复杂度为 O(m+n),m 为边数,n 是点数。
【输入格式】
第一行 n,m,有 n 个点,m 条边,以下 m 行描述每条边连接的两点。
【输出格式】
欧拉路或欧拉回路,输出一条路径即可。要求从小到大顺序搜索,如果有奇点从编号大的奇点开始,否则从 1 开始搜索,回溯时存储输出。
【输入样例】
5 5
1 2
2 3
3 4
4 5
5 1
【输出样例】
1 5 4 3 2 1
【数据范围】
对于 100% 的数据:1<n<100,1<m<2000。
【算法分析】
● 欧拉路径与欧拉回路定义
图中经过所有边恰好一次的路径称为欧拉路径(也就是一笔画)。
如果此路径的起点和终点相同,则称其为欧拉回路。
注意:若存在欧拉回路,则一定存在欧拉路径。
● 欧拉路径判定
(1)有向图欧拉路径:图中恰好存在 1 个结点的出度比入度多 1(这个结点即为起点 S),1 个结点的入度比出度多 1(这个结点即为终点 T),其余结点的出度=入度。
(2)有向图欧拉回路:所有结点的入度=出度(起点 S 和终点 T 可以为任意点)。
(3)无向图欧拉路径:图中恰好存在 2 个结点的度是奇数,其余结点的度为偶数,这两个度为奇数的结点即为欧拉路径的起点 S 和终点 T。
(4)无向图欧拉回路:所有结点的度都是偶数(起点 S 和终点 T 可以为任意结点)。
【算法代码:dfs】
【算法代码:bfs】
【参考文献】

浙公网安备 33010602011771号