#刷题交流#
阿D的最佳飞行路线探索
解法总结:
1. 问题理解:
- 需要从起点 `airports[0]` 飞到终点 `airports[airports.length - 1]`。
- 飞机可以飞往相邻机场(`i - 1` 和 `i + 1`)或同一家航空公司的机场。
2. 数据结构选择:
- 使用 `Queue<Integer>` 进行广度优先搜索(BFS),确保找到的路径是最短的。
- 使用 `Set<Integer>` 记录已访问的机场,避免重复访问。
3. 算法步骤:
- 初始化:
- 将起点 `airports[0]` 加入队列,并标记为已访问。
- 初始化起飞次数 `takeoffs` 为 0。
- BFS 主循环:
- 逐层遍历队列中的机场。
- 对于每个机场,检查其相邻机场(左边和右边)和同一家航空公司的机场。
- 如果找到终点 `airports[airports.length - 1]`,返回当前的起飞次数。
- 否则,将未访问的机场加入队列,并继续搜索。
- 每层遍历结束后,起飞次数加1。
- 返回结果:
- 如果找到路径,返回最小起飞次数。
- 如果没有找到路径(理论上不会发生),返回 `-1`。
关键点:
- BFS 算法:确保找到的路径是最短的。
- 访问控制:使用 `Set` 避免重复访问机场。
- 起飞次数:每层遍历结束后,起飞次数加1。