代码随想录算法训练营第三十二天(回溯算法篇)|332. 重新安排行程

发布时间:2024年01月15日

学习资料:代码随想录 (programmercarl.com)

332. 重新安排行程

题目链接:332. 重新安排行程 - 力扣(LeetCode)

题目大意

有一份航线列表?tickets?,其中?tickets[i] = [fromi, toi]?表示飞机出发和降落的机场地点。对该行程进行重新规划排序。所有这些机票都属于一个从?JFK(肯尼迪国际机场)出发的先生,所以该行程必须从?JFK?开始。如果存在多种有效的行程,按字典排序返回最小的行程组合。

思路

1. 出发/目的地机场的映射关系

可以运用字典,直接将出发机场和目的地机场关联,这样就不用运用序列方式先确定出发机场一样,再找到对应的目的地机场(e.g ticket[0] == curAirport --> append(ticket[1]).

2.?字母序靠前排在前面

和之前的增序子列相似,先将列表排序,这样一旦找到,就肯定是靠前的那个。

代码实现

from collections import defaultdict

class Solution:
    def findItinerary(self, tickets):
        targets = defaultdict(list)  # 创建默认字典,用于存储机场映射关系
        for ticket in tickets:
            targets[ticket[0]].append(ticket[1])  # 将机票输入到字典中
        
        for key in targets:
            targets[key].sort(reverse=True)  # 对到达机场列表进行字母逆序排序     
        result = []
        self.backtracking("JFK", targets, result)  # 调用回溯函数开始搜索路径
        return result[::-1]  # 返回逆序的行程路径
    
    def backtracking(self, airport, targets, result):
        while targets[airport]:  # 当当前机场有可到达的目的地机场
            next_airport = targets[airport].pop()  # 弹出下一个机场
            self.backtracking(next_airport, targets, result)  # 递归调用回溯函数进行深度优先搜索
        result.append(airport)  # 将当前机场添加到行程路径中

文章来源:https://blog.csdn.net/Huiwen18/article/details/135595922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。