题目链接: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. 重新安排行程相关推荐

  1. 「leetcode」332.重新安排行程【回溯算法/深搜】详细图解!

    本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略.各个类型经典题目刷题顺序.思维导图,可以fork ...

  2. 代码随想录算法训练营第30天 | 51. N皇后 37.解数独 332.重新安排行程 回溯篇小结

    代码随想录系列文章目录 回溯篇 - 棋盘问题 图的dfs 文章目录 代码随想录系列文章目录 51.N皇后 37.解数独 332.重新安排行程 回溯篇小结 51.N皇后 题目链接 这道题的思路是什么样的 ...

  3. 代码随想录算法训练营第三十天| 第七章 回溯算法:332.重新安排行程,51.N皇后,37.解数独(python)

    回溯算法总结 332.重新安排行程 讲解链接 class Solution:def __init__(self):self.res = []self.dict = defaultdict(list)d ...

  4. LeetCode刷题流程:回溯算法-13.332. 重新安排行程

    332. 重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从 JFK(肯尼迪国际机 ...

  5. 代码随想录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.正 ...

  6. 代码随想录算法训练营第30天| 332.重新安排行程 、51. N皇后 、 37. 解数独

    代码随想录算法训练营第30天| 332.重新安排行程 .51. N皇后 . 37. 解数独 332.重新安排行程 开始想的是将行程进行全排列之后,然后选出一个字典排序最小的.就也是使用的回溯的思路. ...

  7. 回溯 | 19 332.重新安排行程(hard)**

    本文记录的是刷题过程中的重要概念和笔记.如有侵权,请联系删除. 目录 332.重新安排行程 思路 死循环 记录映射关系 回溯法 c++ 补充:const 总结 332.重新安排行程 力扣题目链接(op ...

  8. 算法训练day24 | php | 332.重新安排行程 , 51. N皇后 , 37. 解数独 ,总结

    一.力扣题332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序. 所有这些机 ...

  9. 代码随想录【Day 30】| 332.重新安排行程 、51. N皇后 、37. 解数独

    代码随想录[Day 30] | 332.重新安排行程 .51. N皇后 .37. 解数独 332.重新安排行程 题目链接:332.重新安排行程 卡尔文解 解题思路及注意事项: 代码实现: 51. N皇 ...

最新文章

  1. 第六代微型计算机是,AMD Carrizo第六代A系列处理器技术解析
  2. 「Github」Linux/Ubuntu下终端Github教程与手册
  3. JS过滤表单数据中的特殊字符
  4. 新CIO:Mark Schwartz认为的领先IT
  5. python继承多重继承
  6. 【svn】设置过滤文件
  7. SQL-server 如何与 visual studio 建立连接
  8. mean shift 图像分割(一、二、三)
  9. oracle update范例,oracle 12c单范例数据库打12.1.0.2.4补丁记录
  10. 工厂方法(Factory Pattern)
  11. 一个简单例子理解连表查询
  12. html5移动端转盘,基于zepto适合移动端的幸运大转盘插件
  13. [!] No `Podfile' found in the project directory.
  14. 没解决:RuntimeWarning: tp_compare didn't return -1 or -2 for exception
  15. stm32将flash虚拟成U盘来下载程序
  16. web app 第三方登录-微博登录(一)
  17. 易语言 html 服务器,易语言模拟网页Web服务器源代码
  18. 详细设计和概要设计的思考
  19. java 判断是否手机浏览器_js 判断是否是 手机端的浏览器
  20. Java基本数据类型(范围 默认值 占用字节 精度

热门文章

  1. 【学习笔记】 IDEA中导入mysql的驱动jar包
  2. 变法拳拳风雷大,万物复苏当可期----熔断非下跌原因
  3. ES6和ES7及ES8新特性最新规范知识详细总结
  4. Bugku:加密 富强民主
  5. 数字信号处理之-能量信号与功率信号
  6. excel导出图片方格居中
  7. A Practical Guide to Support Vector Classication
  8. 面向前端的设计规范-文字初探-Part1
  9. 年薪三万VS年薪十万,你会怎么选?
  10. 【Unity Shader实例】 水体WaterEffect(一) 设计