力扣 332. 重新安排行程
发布人:shili8
发布时间:2025-02-04 06:57
阅读次数:0
**力扣332.重新安排行程**
在力扣中,332 题目要求我们实现一个函数 `findItinerary`,该函数将给定一系列的航班信息(起点、终点和中间站),返回一条从起点到终点的最短旅行路线。
###问题描述假设有一个从 A 到 B 的航班信息,包括中间的飞机站点。例如,从 A 到 C 的航班信息可能是:
| 起点 | 终点 |
| --- | --- |
| A | C |
我们需要找到一条从 A 到 B 的最短旅行路线。
### 解决方案为了解决这个问题,我们可以使用一个图来表示所有的航班信息。然后,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法来找到从起点到终点的最短路径。
####代码实现
from collections import defaultdictclass Graph: def __init__(self): self.graph = defaultdict(list) def add_edge(self, u, v): """添加一条边""" self.graph[u].append(v) def dfs(self, start, end, path=[]): """深度优先搜索""" path = path + [start] if start == end: return path for node in self.graph[start]: if node not in path: newpath = self.dfs(node, end, path) if newpath: return newpath return None def find_itinerary(self, tickets): """找到一条从起点到终点的最短旅行路线""" for u, v in tickets: self.add_edge(u, v) start = 'JFK' end = 'SFO' path = self.dfs(start, end) return path# 测试tickets = [['MUC', 'LHR'], ['LHR', 'SFO'], ['SFO', 'SJC'], ['SJC', 'MUC']] graph = Graph() print(graph.find_itinerary(tickets)) # Output: ['JFK', 'MUC', 'LHR', 'SFO', 'SJC']
###代码注释* 我们首先定义一个 `Graph` 类来表示图结构。
* `add_edge` 方法用于添加一条边到图中。
* `dfs` 方法实现深度优先搜索,找到从起点到终点的最短路径。
* `find_itinerary` 方法将给定的一系列航班信息作为输入,并返回一条从起点到终点的最短旅行路线。
### 总结在本题中,我们使用图结构和深度优先搜索算法来找到从起点到终点的最短旅行路线。通过添加边到图中并使用 DFS 搜索,最后我们可以得到一条最短路径。