《数据结构与算法分析》寻找欧拉回路--多次修改最终复杂度O(E+V)

前言:

      欧拉回路这一块,书上只用画图的方式解释了思路,然后说,采用合适的数据结构,可以把复杂度变为O(E+V),课本上简单的提及了一下,使用链表,并且保存指向最后扫描到的边的指针。当时无论怎么想都没有想明白,这到底要怎么样做才能实现。于是花了4,5个小时去网上搜寻博客,寻找oj相似的题目,寻找本书的答案。结果什么结果都没有得到。

最终决定,还是先实现基本的功能吧,不然这一章就白学了。然后从最基础的慢慢开始实现,实现的过程之中,自然就发现了如何将效率升高的方式了。接下来的博客我将仔细说明我是如何一步步修改过来的。

我的github:

我实现的代码全部贴在我的github中,欢迎大家去参观。

https://github.com/YinWenAtBIT

介绍:

欧拉回路:

一、定义:

欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。

判断欧拉回路是否存在的方法

有向图:图连通,所有的顶点出度=入度。

无向图:图连通,所有顶点都是偶数度。

判断欧拉路是否存在的方法

有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。

无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。

这里欧拉路不等同与欧拉回路。欧拉回路会在完成所有边的访问时回到出发的顶点。欧拉路会在完成所有边的访问之后结束于另一个顶点。

算法步骤:

1.从起点开始,进行深度优先搜索,每访问一条边,就将该边删去,直到回到起点,并且没有相邻边可以访问。

2.从刚刚访问的路径上,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值