浅论 欧拉路径&欧拉回路

欧拉路径

废话不扯,直接先了解一下定义

如果图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] )
posted @ 2019-07-12 20:32  Nomad_Joe_violet  阅读(3)  评论(0编辑  收藏  举报  来源