python生成一笔画_欧拉通路/回路和一笔画问题

简介

LeetCode 每日一题刷到了一笔画问题。其核心是找到图的欧拉通路或欧拉回路。之前用DFS做的,算法也不太了解。结合题解总结一下。

欧拉通路、欧拉回路和欧拉图

欧拉通路: 通过图中的每条边且只通过一次,并且经过每一顶点的通路。

欧拉回路:通过途中每条边且只通过一次,并且经过每一个顶点的回路。

无向图

欧拉通路:图连通,图中只有0个或者2个度为奇数的节点

G仅有两个奇度节点的连通图,G的欧拉通路必以此两个节点为端点

G无奇度节点时,必有欧拉回路

欧拉回路:图连通,图中所有节点度均为偶数。(G为欧拉图的充要条件)

具有欧拉回路的无向图为欧拉图。具有欧拉通路但不具有欧拉回路的无向图为半欧拉图。

有向图

欧拉通路:图连通;除两个端点之外其余节点入度与出度相等;1个节点的入度比初度大1,1个节点的入度比出度小1。

欧拉回路:图连通,所有节点入度等于出度。

Hierholzer 算法

Hierholzer算法给定有向图,且为欧拉图,求欧拉回路。

选定起点,便利所有边

DFS访问相邻顶点,将所有经过的边都删除

如果当前顶点没有相邻遍,顶点入栈

栈中顶点倒序输出,为起始点出发的欧拉回路

如果是半欧啦图,给定起始点(入度出度相差为1)该算法可以求出欧啦通路。

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值