基于DFS的求欧拉回路算法


6、基于DFS的求欧拉回路算法:

笔记:

欧拉回路:指能够一遍不重复的走过所有边的图(经过点次数可以不计)

哈密尔顿圈:指能狗一次不重复走过所有点的图(经过边的次数可以不计)

对于哈密尔顿圈,并没有什么有效的算法,对于欧拉回路我们可以使用基于DFS算法的思想来寻求一张图是否存在回路


当然,欧拉回路其实有一下性质:

*如果图中奇数度的顶点个数小于等于2,则一定存在欧拉回路

*在无向图中每个顶点的度都是偶数,则一定存在回路

*在有向图中,每个节点的入度等于出度,则存在回路



实现思路:

寻找欧拉回路要分为两种情况:

**图中存在一个或两个读书为奇数的点,这是,起点必须是度数为奇数的点,必然的,终点必须为另一个度数为奇数的(如果是两个度数为奇数的点)

**图中的点的读书都是偶数,这就可以任意起点


选定起点后,每次依照起点,找出回路,显示出来,删除环路的边,将环路点序记下

在剩下的图中,继续深搜,找到环路,在已有的点序中添加一个环进去

直到图中不存在环






实现过程:

通过DFS搜索,找到一个回路,A-G-F-A

将边{A,G},{G,F},{F,A}删去

得到回路:A-G-F-A

通过DFS搜索,找到一个回路,F-E-J-F

将边{F,E},{E,J},{J,F}删去

得到回路:A-G-F-E-J-F-A

通过DFS搜索,找到一个回路,J-D-I-J

将边{J,D},{D,I},{I,J}删去

得到回路:A-G-F-E-J-D-I-J-F-A

通过DFS搜索,找到一个回路,I-C-H-I

将边{I,C},{C,H},{H,I}删去

得到回路:A-G-F-E-J-D-I-C-H-I-J-F-A


通过DFS搜索,找到一个回路,H-B-G-H

将边{H,B},{B,G},{G,H}删去

得到回路:A-G-F-E-J-D-I-C-H-B-G-H-I-J-F-A

DFS遍历,发现没有通路和环路了,到i结束

最终欧拉回路:A-G-F-E-J-D-I-C-H-B-G-H-I-J-F-A

注意:以上的每次回路寻找都是不定的,只要有回路就可以了
















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值