You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python面试题:如何基于两个列表计算两座岛屿间的最低票价

Python面试题:岛屿最低票价计算实现

题目给定条件

  • 全局列表定义:
islands = [isl_1, isl_2, isl_3, isl_4]
tickets = [0, 100, 200, 300, 2, 0, 25, 170, 10, 20, 0, 300, 540, 80, 60, 0]
  • tickets规则:每4个元素为一组,依次对应isl_1到isl_4作为出发地,到所有4个岛屿的票价,值为0代表出发与目的地为同一岛屿。
  • 要求实现函数:def cheapest_ticket(from_isl, to_isl),返回两个岛屿之间的最低票价。

解题思路

本题本质是带权有向图的最短路径问题,一共只有4个节点(岛屿),计算量极小,采用Floyd-Warshall算法预计算所有节点对的最短路径,后续查询可以直接返回结果,效率极高。

完整实现代码

# 预先构建岛屿到下标的映射、邻接矩阵、最短路径矩阵
island_to_idx = {isl: idx for idx, isl in enumerate(islands)}
node_count = len(islands)
# 初始化邻接矩阵
adj_matrix = [tickets[i*4 : (i+1)*4] for i in range(node_count)]
# 初始化最短路径矩阵
dist = [row[:] for row in adj_matrix]

# Floyd算法计算所有节点对最短路径
for k in range(node_count):
    for i in range(node_count):
        for j in range(node_count):
            if dist[i][j] > dist[i][k] + dist[k][j]:
                dist[i][j] = dist[i][k] + dist[k][j]

def cheapest_ticket(from_isl, to_isl):
    # 校验输入合法性
    if from_isl not in island_to_idx or to_isl not in island_to_idx:
        raise ValueError("输入的岛屿不存在")
    from_idx = island_to_idx[from_isl]
    to_idx = island_to_idx[to_isl]
    return dist[from_idx][to_idx]

测试示例

比如查询isl_1到isl_4的最低票价:

cheapest_ticket(isl_1, isl_4)

返回结果为270,路径为isl_1 -> isl_2 -> isl_4,总票价100+170=270,比直达的300更便宜。

内容的提问来源于stack exchange,提问作者Mike L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:39:02