欧拉回路(leetcode 重新安排行程)

先学习一下欧拉回路是怎么一回事。

对于图中这七个节点,从节点1出发,最终要到达节点1,并且每条路只能走一次,且每条路都得走过一次。

使用dfs,如果算法按照字典序的排列方式选择下一个节点。

第一部分:那么算法的流程是,节点1--> 节点2-->节点3-->节点1。这时候到达节点1后发现,节点1无路可走了兄弟们,退回到节点3继续走呗。

第二部分:接着流程是,节点3--> 节点4-->节点5-->节点3。退退退,退到节点5发现也无路可走,再退到节点4继续。

第三部分:接着流程是,节点4--> 节点6-->节点7-->节点4。最终所有的路都走了一遍。

我们发现,第二部分的流程,从3开始,最终到达3,那么可以插入到第一部分的节点3上。

第一部分的流程变成:节点1--> 节点2-->节点3--> 节点4-->节点5-->节点3-->节点1。

第三部分流程,从4开始,最终到达4,那么可以插入到第一部分的节点4上。

第一部分的流程变成:节点1--> 节点2-->节点3--> 节点4--> 节点6-->节点7-->节点4-->节点5-->节点3-->节点1。

这一套流程下来,所有的边都走过一遍,且只走一遍。

再重新分析一遍第一部分,节点1--> 节点2-->节点3-->节点1,发现最终到达节点1的时候,无路可走,节点3又可以走其他路,那么可以推出,从节点3-->节点1这一段路应该是最后的一段路。可以先加入列表ans中。

第二部分流程是,节点3--> 节点4-->节点5-->节点3。发现最终到达节点3的时候,无路可走,节点4又可以走其他路,那么可以推出,从节点4-->节点5-->节点3。这一段路应该是倒数第二段路。可以加入列表ans中。

第三部分流程是,节点4--> 节点6-->节点7-->节点4。最终所有的路都走了一遍。这是从节点4到达节点4的一段路,是正着走的一段路,ans中倒着走的一段路。

看例题:

这是有向图,并且路径可能重复。例如可能存在两条一样的路:JFK-->SFO。

class Solution:
    def findItinerary(self, tickets: List[List[str]]) -> List[str]:
        edge = defaultdict(list)
        ans = []
        for x, y in tickets:
            edge[x].append(y)
        def dfs(u):
            qu = edge[u]
            qu.sort()
            while qu:
                v = qu.pop(0)
                dfs(v)
            ans.append(u)
        dfs('JFK')
        return ans[::-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/590158.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式: 模板模式

目录 一,模板模式 二,特点 三,组成部分 四,实现步骤 五,案例 一,模板模式 模板模式(Template Pattern)是一种行为型设计模式,它在超类中定义了一个算法的骨架&#…

spring boot 启动流程详解

主启动类 SpringBootApplication MapperScan("com.example.mapper") public class StableBootApplication {public static void main(String[] args) {SpringApplication.run(StableBootApplication.class,args);} }SpringApplication类中有个静态run()方法&#xf…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

飞致云开源社区月度动态报告(2024年4月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。值得注意的是&…

VS下编译cuda代码MSB3721,返回代码255

查了一天才找到问题 将Generate Relocatable Device Code 设置为true

Kelpa-小型服务器开发框架分享

分享我的服务器开发框架--Kelpa: 这是一个由现代C编写的小型、学习性质的服务器框架,包含压缩,序列化,IO调度,Socket封装,文件配置,日志库等多个完整自研模块: 项目目前仍处于开发阶…

【银角大王——Django课程——用户表的基本操作】

Django课程——用户表的基本操作 模板的继承用户管理用户列表展示新建用户Django组件原始方法【麻烦,太原始】form组件modelform组件 使用modelsform组件编写添加页面 模板的继承 (1)先写一个页面模板————这个案例中的模板基本上就是一个…

无言:破局之道:顿悟+坚持——早读(逆天打工人爬取热门微信文章解读)

致无言 引言Python 代码第一篇 洞见 7年跟踪调查北京28个精英家庭:为什么顶尖大学孩子大多来自有钱家庭?第二篇 人民日报 来了!新闻早班车要闻社会政策 结尾 控制你的情绪 否则它将控制你 在紧张的游戏中 控制情绪 避免冲动行为 是每个玩家的…

学习java的继承

1.什么是继承 java中提供了一个关键字,extends,可以让一个类与另一个类建立起父子关系。 例如 public class B extends A { --- } 在这里,我们称A类为父类(也被称为基类或者超类)B类称为子类(或者是派生…

IDEA 申请学生许可证

如果你有学生账号,并且账号是 EDU 结尾的,可以申请 IDEA 的学生许可证。 有效期一年,完全免费。 在界面上输入邮件地址,然后单击按钮提交。 邮件中单击链接 JetBrains 会把一个带有链接的邮件发送到你的邮箱中。 单击邮箱中的…

【CTF MISC】XCTF GFSJ0512 give_you_flag Writeup(图像处理+QR Code识别)

give_you_flag 菜狗找到了文件中的彩蛋很开心,给菜猫发了个表情包 解法 图片的最后一帧好像闪过了什么东西。 用 Photoshop 打开,检查时间轴。 找到一张二维码,但是缺了三个角(定位图案),无法识别。 找一…

C语言----贪吃蛇(补充)

各位看官好,我想大家应该已经看过鄙人的上一篇博客贪吃蛇了吧。鄙人在上一篇博客中只是着重的写了贪吃蛇的实现代码,但是前期的一些知识还没有具体的介绍,比如确认光标位置,句柄等。那么我这一篇博客就来补充上一篇博客所留下来的…

使用 Wireshark 实现 ARP 嗅探监听网络

前言 Wireshark是一个开源的网络协议分析工具,用于捕获和分析网络数据包。它可以在多个操作系统上运行,并提供了强大的功能和用户友好的界面。 通过Wireshark,用户可以捕获网络流量,并对其进行深入的分析。它支持多种协议的解析…

计算机网络-408考研

后续更新发布在B站账号:谭同学很nice http://【计算机408备考-什么是计算机网络,有什么特点?】 https://www.bilibili.com/video/BV1qZ421J7As/?share_sourcecopy_web&vd_source58c2a80f8de74ae56281305624c60b13http://【计算机408备考…

一文读懂Mysql数据库索引原理

MyISAM 存储引擎索引实现: MyISAM 索引文件(磁盘上表对应.MYI)和数据文件(MYD)是分离的(非聚集) InnoDB 存储引擎索引实现: InnoDB 索引实现(聚集) 表数据文…

Bert基础(二十)--Bert实战:机器阅读理解任务

一、机器阅读理解任务 1.1 概念理解 机器阅读理解(Machine Reading Comprehension, MRC)就是给定一篇文章,以及基于文章的一个问题,让机器在阅读文章后对问题进行作答。 在机器阅读理解领域,模型的核心能力体现在对…

【Cpp】类和对象#拷贝构造 赋值重载

标题:【Cpp】类和对象#拷贝构造 赋值重载 水墨不写bug 目录 (一)拷贝构造 (二)赋值重载 (三)浅拷贝与深拷贝 正文开始: (一)拷贝构造 拷贝构造函数&…

49. 【Android教程】HTTP 使用详解

在你浏览互联网的时候,绝大多数的数据都是通过 HTTP 协议获取到的,也就是说如果你想要实现一个能上网的 App,那么就一定会和 HTTP 打上交道。当然 Android 发展到现在这么多年,已经有很多非常好用,功能非常完善的网络框…

线性神经网络示例

通过5个条件判定一件事情是否会发生,5个条件对这件事情是否发生的影响力不同,计算每个条件对这件事情发生的影响力多大,写一个线性神经网络模型pytorch程序,最后打印5个条件分别的影响力。 一 在这个场景中,一个线性神经网络&…

ubuntu与redhat的不同之处

华子目录 什么是ubuntu概述 ubuntu版本简介桌面版服务器版 安装部署部署后的设置设置root密码关闭防火墙启用允许root进行ssh登录更改apt源安装所需软件 网络配置Netplan概述配置详解配置文件DHCP静态IP设置设置 软件安装方法apt安装软件作用常用命令配置apt源 deb软件包安装概…