浅论 欧拉路径&欧拉回路
欧拉路径
废话不扯,直接先了解一下定义
如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)
这需要跟哈密顿路区别一下,前者是边,后者是点
如果一个图中存在具有欧拉路径但不具有欧拉回路则称为半欧拉图
那么该如何求图中的欧拉路径呢
分类讨论一下
对于无向图
无向图中,一条欧拉路径上有且仅有两个度数为奇数的点(其他点度数都是偶数),这两个点就是这条欧拉路径的起点和终点
for( int i = 1 ; i <= n ; ++ i )
if( de[i] % 2 ) {
sta = i ;
break ;
}
对于有向图
有向图中,欧拉路径上仅有两点出度和入度不等,且其中一点入度等于出度-1,另一点入度等于出度+1,这条路径的起点就是出度大于入度的点,终点是出度小于入度的点(理解为每一点除起终点外,都是有进有出的)
求欧拉路径代码
void DFS( int x ) {//有向,无向通用,访问标记的是边
for( int i = 0 ; i < G[x].size() ; ++ i ) {
int s = G[x][i].num , E = G[x][i].e ;//s为子节点,E为x到s的路径
if( vis[E] )