欧拉回路(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]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解救应用启动危机:Spring Boot的FailureAnalyzer机制

目录 一、走进FailureAnalyzer 二、在Spring Boot中如何生效 三、为什么可能需要自定义FailureAnalyzer 四、实现自定义基本步骤 (一)完整步骤要求 (二)注册方式说明 通过Spring Boot的spring.factories文件(建…

ChatGPT等AI大模型输出格式错误优化分享

#ChatGPT/坑 当 ChatGPT没有按照要求的格式输出 省时间,直接上结论 切换模型也不太好使,捕获异常回调重试发送提示词也不太好使。 原因是相同的提示词会触发类似 “缓存” 的东西持续输出错误的结果,至上与上次输出的 70% 都是相同的&…

EMP.DLL是什么东西?游戏提示EMP.DLL文件缺失怎么解决

emp.dll文件是Windows操作系统中的一种动态链接库文件,它被设计为可以被多个程序共享使用的模块化文件。这种设计旨在提高系统效率,减少内存消耗,并简化软件的维护和更新。DLL文件通常包含了一系列相关的函数和变量,这些函数和变量…

基于java,SpringBoot和VUE的求职招聘简历管理系统设计

摘要 基于Java, Spring Boot和Vue的求职招聘管理系统是一个为了简化求职者与雇主间互动流程而设计的现代化在线平台。该系统后端采用Spring Boot框架,以便快速搭建具有自动配置、安全性和事务管理等特性的RESTful API服务,而前端则使用Vue.js框架构建动…

使用unreal engine5.3.2创建c++第一人称游戏

UE5系列文章目录 文章目录 UE5系列文章目录前言一、NuGet 简介二、解决方法: 前言 为了使用unreal engine5.3.2创建c第一人称游戏,今天安装了Visual Studio 2022专业版。在ue5中创建c工程,结果编译器报错: 严重性 代码 说明 项目…

UE5入门学习笔记(六)——编译低版本插件

对于有些低版本的插件,可以通过此方法自己编译到高版本而无需等待插件作者更新 使用工具:如图所示 步骤1:打开cmd,并使用cd命令切换到此目录 步骤2:输入如下指令 RunUAT.bat BuildPlugin -Plugin“路径1” -Package“…

06 - metastore服务、hive服务启动脚本以及相关使用技巧

目录 1、metastore服务 1.1、metastore运行模式 1.2、metastore部署 1.3、测试 2、编写Hive服务启动脚本 3、Hive使用技巧 3.1、Hive常用交互命令 3.2、Hive参数配置方式 3.3、Hive常见属性配置 1、metastore服务 Hive的metastore服务的作用是为Hive CLI或者Hiveserv…

MYSQL数据库专业术语及创建数据表详细讲解[详细版]{sql语句创建数据库语句及条件子句解析,编码格式解析,创建数据表解析,表定义字段解析,主键约束解析}

MYSQL数据库中的专业术语 数据库(Database):存储数据的集合,是数据的逻辑容器。 表(Table):数据库中存储数据的结构,由行(记录)和列(字段&#x…

【深度学习基础(2)】深度学习之前:机器学习简史

文章目录 一. 深度学习的起源1. 概率建模--机器学习分类器2. 早期神经网络--反向传播算法的转折3. 核方法 -- 忽略神经网络4. 决策树、随机森林和梯度提升机5. 神经网络替代svm与决策树 二. 深度学习与机器学习有何不同 可以这样说,当前工业界所使用的大部分机器学习…

云原生Kubernetes: K8S 1.29版本 部署Harbor

目录 一、实验 1.环境 2.Linux 部署docker compose 3.证书秘钥配置 4.K8S 1.29版本 部署Harbor 5.K8S 1.29版本 使用Harbor 二、问题 1.docker 登录harbor失败 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注masterK8S master节点1.2…

论文辅助笔记:TEMPO 之 dataset.py

0 导入库 import os import pandas as pd import torch from torch.utils.data import Dataset from .utils import StandardScaler, decompose from .features import time_features1 Dataset_ETT_hour 1.1 构造函数 class Dataset_ETT_hour(Dataset):def __init__(self,ro…

STM32中断系统详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 中断基本概念 2. STM32中断 3. NVIC的基本组件 3.1 NVIC的基本组件 3.2 NVIC的优先级 4. EXTI外部中断 4.1 基本概念 4.2 基本结构 5. AFIO 1. 中断基本概念 中断(Interrupt&…

专注 APT 攻击与防御—工具介绍Veil-Evasion

专注 APT 攻击与防御 - Micro8 系列教程项目地址:https://github.com/Veil-Framework/Veil-Evasion 1、Veil-Evasion Veil-Evasion 是与 Metasploit 生成相兼容的 Payload 的一款辅助框架,并可以绕过大多数的杀软。 Veil-Evasion 并没有集成在kali&am…

Java零基础入门到精通_Day 9

1.ArrayList 编程的时候如果要存储多个数据,使用长度固定的数组存储格式,不一定满足我们的需求,更适应不了变化的需求,那么,此时该如何选择呢? 集 合 集合类的特点:提供一种存储空间可变的存储模型,存储的…

微调Mistral 7B以实现命名实体识别 (NER)

文章来源:fine-tuning-mistral-7b-for-named-entity-recognition-ner 2024 年 4 月 19 日 在自然语言处理(NLP)领域,命名实体识别(NER)被认为是一项关键任务,应用范围广泛,包括信息…

WPF基础应用

WPF参考原文 MVVM介绍 1.常用布局控件 1.1 布局控件 WPF(Windows Presentation Foundation)提供了多种布局容器来帮助开发者设计用户界面,以下是一些常用的布局: Grid: Grid是最常用的布局容器之一,它允许你通过定…

ArcGIS小技巧—基于点数据的密度分析(含练习数据)

关于空间点数据的密度分析,Arcgis Map中提供了基础的点密度分析和核密度分析。核密度分析可以通过手动设置搜索半径,调整密度分布的合理性。 但有时由于实际工作的需要,我们需要对研究范围做特定划分,比如根据格网规则划分做密度…

计算机毕业设计hadoop+spark+hive知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

黄河科技学院本科毕业设计 任务书 工 学部 大数据与计算机应用 科教中心 计算机科学与技术 专业 2018 级普本1/专升本1班 学号 学生 指导教师 毕业设计题目 基于实时音乐数据挖掘的个性化推荐系统设计与优化 毕业设计工作内容与基本…

Arcgis 数据分类+批量制作

1、计算统计数据 2、更改符号系统–做分类 右击图层属性–符号系统–已分类–分类 改为手动—设置分类 完成

PHP 日期和时间 Date()函数 获取当前时间

目录 PHP Date() 函数获取日期获取当前时间下面是常用于时间的字符: PHP Date() 函数 PHP Date() 函数把时间戳格式化为更易读的日期和时间。 获取日期 date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。 下面列出了一些常用于日期的字…