787. K 站中转内最便宜的航班
有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei 抵达 toi。
现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到出一条最多经过 k 站中转的路线,使得从 src 到 dst 的 价格最便宜 ,并返回该价格。 如果不存在这样的路线,则输出 -1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cheapest-flights-within-k-stops
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Arrays;
class Solution {
public int findCheapestPrice(int n, int[][] flights, int src, int dst, int k) {
k++;
int[][] dp = new int[n][k + 1];
int INF = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
Arrays.fill(dp[i], INF);
}
dp[src][0] = 0;
for (int i = 1; i <= k; i++) {
for (int[] flight : flights) {
if (dp[flight[0]][i - 1] != INF) {
dp[flight[1]][i] = Math.min(dp[flight[1]][i], dp[flight[0]][i - 1] + flight[2]);
}
}
}
int min = Arrays.stream(dp[dst]).min().getAsInt();
return min != INF ? min : -1;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号