欧拉回路

首先来解释一下什么是欧拉回路

如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。

如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。 

具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。

 

然后我们再来解释一下度的概念:

无向图中的度值得是边的条数,在有向图中,我们一般不这么说,而是说出度,入度,接下来我们来看一下欧拉回路和欧拉路径与度的关系

 

无向图存在欧拉回路的条件:

所有的度都是偶数,并且图连通

无向图存在欧拉路径的条件:

除了起点和终点的度可以是奇数外,其余的点的度都是偶数,当然,所有点都是偶数那么是欧拉回路,也自然是欧拉路径

有向图存在欧拉回路的条件:

所有点的出度等于入度,并且图连通

有向图存在欧拉路径的条件:

起点的出度比入度大1,终点的入度比出度大1,其余点的出度等于入度,和上面一样,如果所有的点的出度等于入度,那么是欧拉回路,也自然是欧拉路径

 

求解欧拉路径有多种算法,其中一种是Hierholzer,个人认为比较简单,而且容易懂,接下来给出算法的实现过程,过程来源于网络(https://www.cnblogs.com/acxblog/p/7390301.html

 

Hierholzer算法自动寻找欧拉回路,在找不到欧拉回路的情况下会找到欧拉路径。前提是得给它指定好起点。

算法流程(无向图):

1.判断奇点数。奇点数若为0则任意指定起点,奇点数若为2则指定起点为奇点。

2.开始递归函数Hierholzer(x):
  循环寻找与x相连的边(x,u):
    删除(x,u)
    删除(u,x)
    Hierholzer(u);
  将x插入答案队列之中

3.倒序输出答案队列

对于该图,算法的执行流程如下:
1.找到该图没有奇点,从1开始进行Hierholzer算法。
2.删边1-2 递归到2
3.删边2-3 递归到3
4.删边3-7 递归到7
5.删边7-1 递归到1
6.1无边,1加入队列,返回
7.7加入队列,返回
8.删边3-4 递归到4
9.删边4-5 递归到5
10.删边5-6 递归到6
11.删边6-3 递归到3
12.3加入队列,返回
13.6加入队列,返回
14.5加入队列,返回
15.4加入队列,返回
16.3加入队列,返回
17.2加入队列,返回
18.1加入队列,返回

答案队列为:1 7 3 6 5 4 3 2 1。反向输出即为答案。

有向图除判断是否存在有一点点不同以外同理。

 

至于关于欧拉回路的模板题目可以参考一下该题目

P2731 骑马修栅栏 Riding the Fences    https://www.luogu.org/problemnew/show/P2731 

完毕

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值