回溯算法模板之:332. 重新安排行程
题目链接:332.重新安排行程
分析:需要重新排列行程,并且需要按照自然排序的大小,所以第一步就先进行字典的创建,key是起始地,value是可到达所有的目的地,然后对value进行排序。使用回溯算法进行搜索,这下面有一个回溯的模板:
回溯模板
backtracking() {if (终止条件) {存放结果;}for (枚举同一个位置的所有可能性,可以想成节点孩子的数量) {递归,处理节点;backtracking();回溯,撤销处理结果}
}
class Solution:def findItinerary(self, tickets: List[List[str]]) -> List[str]:if not tickets:return []#DFSd = collections.defaultdict(list) #邻接表for f, t in tickets:d[f] += [t] # 路径存进邻接表for f in d:d[f].sort() # 邻接表排序ans = []def dfs(f): # 深搜函数while d[f]:dfs(d[f].pop(0)) # 路径检索 ans.insert(0, f) # 放在最前dfs('JFK')return ansticket_dict = collections.defaultdict(list)for item in tickets:ticket_dict[item[0]].append(item[1])for k in ticket_dict:ticket_dict[k].sort()path = ['JFK']def backtrack(cur_from):if len(path) == len(tickets) + 1: # 结束条件return Truefor _ in ticket_dict[cur_from]:cur_to = ticket_dict[cur_from].pop(0) # 删除当前节点path.append(cur_to) # 做选择if backtrack(cur_to): # 进入下一层决策树return Truepath.pop() # 取消选择ticket_dict[cur_from].append(cur_to) # 恢复当前节点return Falsebacktrack('JFK')return path
总结:回溯的终止条件是路径的长度等于票数加1,因为题目说了至少存在一条路径,因此结果一定是存在的。
回溯算法模板之:332. 重新安排行程相关推荐
- 「leetcode」332.重新安排行程【回溯算法/深搜】详细图解!
本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...
- 代码随想录算法训练营第30天 | 51. N皇后 37.解数独 332.重新安排行程 回溯篇小结
代码随想录系列文章目录 回溯篇 - 棋盘问题 图的dfs 文章目录 代码随想录系列文章目录 51.N皇后 37.解数独 332.重新安排行程 回溯篇小结 51.N皇后 题目链接 这道题的思路是什么样的 ...
- 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)
回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...
- LeetCode刷题流程:回溯算法-13.332. 重新安排行程
332. 重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从 JFK(肯尼迪国际机 ...
- 代码随想录30——回溯:332重新安排行程、51N皇后、37解数独
文章目录 1.332重新安排行程 1.1.题目 1.2.解答 1.2.1.思路 1.2.2.代码 2.51N皇后 2.1.题目 2.2.解答 3.37解数独 3.1.题目 3.2.解答 3.2.1.正 ...
- 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独
代码随想录算法训练营第30天| 332.重新安排行程 .51. N皇后 . 37. 解数独 332.重新安排行程 开始想的是将行程进行全排列之后,然后选出一个字典排序最小的.就也是使用的回溯的思路. ...
- 回溯 | 19 332.重新安排行程(hard)**
本文记录的是刷题过程中的重要概念和笔记.如有侵权,请联系删除. 目录 332.重新安排行程 思路 死循环 记录映射关系 回溯法 c++ 补充:const 总结 332.重新安排行程 力扣题目链接(op ...
- 算法训练day24 | php | 332.重新安排行程 , 51. N皇后 , 37. 解数独 ,总结
一.力扣题332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序. 所有这些机 ...
- 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独
代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...
最新文章
- 第六代微型计算机是,AMD Carrizo第六代A系列处理器技术解析
- 「Github」Linux/Ubuntu下终端Github教程与手册
- JS过滤表单数据中的特殊字符
- 新CIO:Mark Schwartz认为的领先IT
- python继承多重继承
- 【svn】设置过滤文件
- SQL-server 如何与 visual studio 建立连接
- mean shift 图像分割(一、二、三)
- oracle update范例,oracle 12c单范例数据库打12.1.0.2.4补丁记录
- 工厂方法(Factory Pattern)
- 一个简单例子理解连表查询
- html5移动端转盘,基于zepto适合移动端的幸运大转盘插件
- [!] No `Podfile' found in the project directory.
- 没解决:RuntimeWarning: tp_compare didn't return -1 or -2 for exception
- stm32将flash虚拟成U盘来下载程序
- web app 第三方登录-微博登录(一)
- 易语言 html 服务器,易语言模拟网页Web服务器源代码
- 详细设计和概要设计的思考
- java 判断是否手机浏览器_js 判断是否是 手机端的浏览器
- Java基本数据类型(范围 默认值 占用字节 精度