Menu
CoddyTech

Cheapest Flights Within K Stops

有 n 座城市,编号从 0 到 n-1,以及一个单程航班列表:flights[i] = [from, to, price] 表示一趟从城市 from 飞往城市 to、票价为 price 的航班。

返回从 src 到 dst 且中途最多停靠 k 次的行程的最低总票价,也就是说,最多乘坐 k+1 趟航班。如果不存在这样的行程,返回 -1。

函数

findCheapestPrice(n: integer, flights: integer-2d-array, src: integer, dst: integer, k: integer) → integer
ninteger
城市数量
flightsinteger-2d-array
单程航班,每个表示为 [from, to, price]
srcinteger
旅程开始的城市
dstinteger
旅程结束的城市
kinteger
src 和 dst 之间允许的最多停靠点数
返回值integer
最多有 k 个中途停靠点的行程的最低价格,或 -1

约束条件

  • 2 ≤ n ≤ 1000
  • 1 ≤ flights.length ≤ 4500
  • flights[i] = [from, to, price],其中 0 ≤ from, to < n 且 from ≠ to
  • 1 ≤ price ≤ 104
  • 没有两趟航班的 from 和 to 都相同。
  • 0 ≤ src, dst < n 且 src ≠ dst
  • 0 ≤ k < n

示例

输入
n = 4flights = [[0, 1, 50], [1, 2, 50], [2, 3, 50], [0, 2, 200], [1, 3, 180]]src = 0dst = 3k = 1
输出
230
解释
中转一次允许乘坐两段航班:0 → 1 → 3的费用是 50 + 180 = 230,而0 → 2 → 3的费用是 200 + 50 = 250。更便宜的0 → 1 → 2 → 3需要中转两次。
challenge icon

进阶

如何返回最便宜行程中的城市以及价格?

重置代码
def findCheapestPrice(n, flights, src, dst, k):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

n = 4
flights = [[0, 1, 50], [1, 2, 50], [2, 3, 50], [0, 2, 200], [1, 3, 180]]
src = 0
dst = 3
k = 1

预期输出

230