欧拉回路和欧拉路径(ccf路径)

欧拉路径和欧拉回路

1.欧拉路径:把一个图上所有边都访问一次的路径(每条边只能走一次)。
2.欧拉回路:从起点出发最后回到起点的欧拉路径。
3.如果一个图存在欧拉回路,那么也存在欧拉路径。
B站一个老外讲的原理,中文字幕,临近6级,可以锻炼一下听力。
在这里插入图片描述

大前提:所有度非0的点,都必须属于同一个连通分量

下面这张图是不符合的:
在这里插入图片描述
一.无向图

  1. 满足欧拉回路的条件:每个节点都有偶数的度。
  2. 满足欧拉路径的条件:除了每个节点都有偶数的度,还可以让两个节点有奇数的度,这两个点就是欧拉路径的起点和终点。

二.有向图
3. 满足欧拉回路的条件:每个节点都有相同的入度和出度。
4. 满足欧拉路径的条件:如果存在欧拉路径,最多只有 一个顶点的入度 - 出度 = 1, 且最多只有1个顶点的出度 - 入读 = 1。并且其他所有节点的入度=出度。

下面是一道关于欧拉路径的ccf题目(路径)

参考这位大牛的博客
(https://blog.csdn.net/Touchig/article/details/84804871)
以及Hierholzer’s Algorithm算法
https://www.geeksforgeeks.org/hierholzers-algorithm-directed-graph/
我就着上面那位大牛的代码记录一下我的理解:

  1. vector<set> 利用set直接实现字典序最小(set自带的从小到大排列特性)。
  2. 判断是否存在欧拉路径的特判。
  3. 对上面提及到的大前提的特判
  4. 还有就是最巧妙之处,对图上边是否走过的记录方法(Hierholzer’s Algorithm),直接删掉走过的边(因为有set存图保证了字典序最小)。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值