Euler Cycle - 欧拉回路


问题

求无向图和有向图的欧拉回路。

无向图判断欧拉回路的存在

无向图的任意顶点的度数为偶数(注意这里的度数是指无向图的边数),则该无向图存在欧拉回路;

无向图求欧拉回路

算法求无向图的欧拉回路。设表示顶点可以到达顶点表示顶点无法到达

EulerCycle1.png

上面的无向图可以表示为矩阵:

类似DFS搜索。从任意顶点开始访问,选取它的邻节点作为下一个访问的顶点(经过边,根据无向图性质可知,必然有)。每经过一条边将其删除(令),递归的重复该搜索操作,直到再次回到起点,算法结束。整个过程中经过的边即为该图的欧拉回路。如图所示:

EulerCycle2.png

算法的时间复杂度是

有向图判断欧拉回路的存在

有向图的任意顶点满足,即出度等于入度,则该有向图存在欧拉回路;

有向图求欧拉回路

有向图的欧拉回路的求解方法与无向图一样。


源码

EulerCycle.h

EulerCycle.cpp

测试

EulerCycleTest.cpp