浅谈欧拉路径和欧拉回路

定义

欧拉路径: 经过图中每一条边恰好一次的路径

欧拉回路: 起点和终点是同一个点的欧拉路径

欧拉图: 有欧拉回路的图

半欧拉图: 有欧拉路径的图

判断

怎么判断一张图有没有欧拉路径或欧拉回路呢?

有向图

如果图中所有的点的入度都等于出度并且这张图的基图联通,那么就存在欧拉回路

简单感性证明:因为入度和出度相同,所以每次进入一个点的时候,就必定能够出去,最后走回起点。

如果图中有一个点出度比入度大1,一个点入度比出度大1,其他的点入度和出度相等,那么就存在一条从出度比入度大1的点出发到入度比出度大1的点欧拉路径,证明和上面类似。

无向图

如果图中所有点的度都是偶数,那么就存在欧拉回路,证明和上面类似。

如果图中有且仅有两个奇点(度为奇数的点),那么就存在从其中一个奇点到另一个奇点的欧拉路径。

查找

找欧拉回路和欧拉路径的方法大体相同,有两种算法(Fleury算法和hierholzer算法),但是它们的本质是一样的。

做法很简单,从上面的判断可知,如果存在欧拉回路,那么随便从一个点出发,乱走,最后一定能走回自己,那么乱走即可,顺路记下路径,完美完成任务。

因为每条边只能走一次,所以走过之后要将边给删掉,可以打一个暴力的邻接矩阵 O ( n 2 ) O(n^2) O(n2),更优秀一点的可以用一个平衡树来维护与自己相连的点们 O ( n l o g n ) O(nlogn) O(nlogn)

欧拉路径的话,因为有两个特殊的奇点,我们只需要根据图中点的度将这两个点找出来,从其中一个出发乱走即可。

注意,大前提是这个图中有欧拉回路!

模板题在此。

应用

这里举一个简单经典的例子。

n ( n < = 100000 ) n(n<=100000) n(n<=100000) 个单词,如果 a a a 单词的尾字母和 b b b 单词的首字母相同,那么 b b b 可以接在 a a a 的后面,现在问是否能用这些单词连成一个环(不必用完)。

如果将单词视为点,将连接关系视为边,那么发现不好做,于是需要神奇的改变点和边所代表的对象。

26 26 26 个字母视为点,将单词视为边,单词的首字母连向单词的尾字母,这样我们只需要找到图中的欧拉回路即可。


时间有点紧,于是写的有些潦草简短,以后发现欧拉回路和欧拉路径的优秀应用后一定会回来补一补的qwq。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值