787. K 站中转内最便宜的航班

难度中等346收藏分享切换为英文接收动态反馈

n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei 抵达 toi

现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到出一条最多经过 k个 中转的站中转的路线,使得从 srcdst价格最便宜 ,并返回该价格。 如果不存在这样的路线,则输出 -1

示例 1:

输入:
n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]
src = 0, dst = 2, k = 1
输出: 200
解释:
城市航班图如下

从城市 0 到城市 2 在 1 站中转以内的最便宜价格是 200,如图中红色所示。

方法:动态规划

动态规划:此刻的状态由前面状态决定的,在此题中是考虑1~K次的中转次数到达目标站台的最小值,其中这1~K次中转也是所有路径最短的,即最便宜的,这就要考虑k-1次中转到达前面某个站台的价格最小值,到达前面某站可以想象成要求的到达dst的最小值,这样可以看出每次所求的站台都是由到达前面站台价格的最小值决定的。因此反过来考虑,我们只需要知道最初搭乘次数为0(就是起点不动,由此往下推出到达某个站台的最小值)时到达各个站台的价格;具体可以看注释

class Solution {public:int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {//最多K次中转,次数小于等于K次,dp_price表示中搭乘K次到达某个站最便宜的价格;//最便宜价格的初值设置为不可能到达的价格,即最大值;//dp_price[i][to]为二维数组0<=i<=k+1,0<=to<=n-1因为最多中转K次,则最大搭乘次数为k+1;const int INF=10000*101+1;vector<vector<int>> dp_price(k+2,vector<int>(n,INF));//设置边界条件//当i=0时,即搭乘次数为0时,若to=src则dp_price[i][src]=0;to!=src时,则dp_price[i][to]=INT_MAX;dp_price[0][src]=0;for(int i=1;i<=k+1;++i){for(auto &x:flights){int _src=x[0],_dst=x[1],_price=x[2];dp_price[i][_dst]=min(dp_price[i][_dst],dp_price[i-1][_src]+_price);//此处要注意从_src到达_dst//时,应当时i-1次到达_src//的最小值加上price}}int _min_price=INF;for(int _k=0;_k<=k+1;++_k){_min_price=min(dp_price[_k][dst],_min_price);}return _min_price==INF?-1:_min_price;}
};

leetcode每日一题系列——787. K 站中转内最便宜的航班相关推荐

  1. LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)

    文章目录 贝尔曼-福特算法(Bellman-Ford) 简介 算法思想 算法执行过程 应用 题目描述 分析 代码 LeetCode 787. K 站中转内最便宜的航班 题目描述 Bellman For ...

  2. LeetCode——787. K 站中转内最便宜的航班(Cheapest Flights Within K Stops)[中等]——分析及代码(Java)

    LeetCode--787. K 站中转内最便宜的航班[Cheapest Flights Within K Stops][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 ( ...

  3. LeetCode 787.K站中转内最便宜的航班

    LeetCode 787.K站中转内最便宜的航班 有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 ds ...

  4. 787. K 站中转内最便宜的航班(动态规划)

    package com.wsq.leetcode; /*** 787. K 站中转内最便宜的航班* @author wsq* @date 2020/10/21有 n 个城市通过 m 个航班连接.每个航 ...

  5. 【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径

    前言 我感觉这题比较有代表性,所以记录一下,这题是加权有向图中求最短路径的问题. 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst],解法一 ...

  6. 最短路径-图-----练习力扣787. K 站中转内最便宜的航班

    首先还是搞定三种最短路径的算法. 参考:https://www.cnblogs.com/Halburt/p/10756572.html https://www.cnblogs.com/tahitian ...

  7. 787. K 站中转内最便宜的航班(加权有向图的最短路径)

    题目:787. K 站中转内最便宜的航班 两种方法: 方法一: 思路: 加权图的最短路径 1. 首先将航线转化为字典形式存储.(当前城市–下一城市–费用) 2. 建一个双向队列,元素为元组形式.(当前 ...

  8. 力扣787. K 站中转内最便宜的航班

    有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei ...

  9. 【Bellman-Ford算法(求解最短路径约束问题)】787. K 站中转内最便宜的航班——算法分析

    [Bellman-Ford算法(求解最短路径约束问题)]787. K 站中转内最便宜的航班--算法分析 787. K 站中转内最便宜的航班 有 n 个城市通过一些航班连接.给你一个数组 flights ...

最新文章

  1. 新兴解决方案增强了电动汽车电源(功耗)管理
  2. Scrum中如何实现一个Sprint?
  3. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read from remote )
  4. 小程序设计避免犯什么错_新设计师犯下的5种印刷错误以及如何避免
  5. 如何实现一个线程安全的 ConcurrentHashSet ?
  6. 生产Java应用程序中的十大异常类型-基于1B事件
  7. Java 压缩解压字符串(支持中文)
  8. WCF中的管道——管道类型
  9. python读取图片并储存为CSV文件
  10. Moonlight 2紧随Silverlight而来
  11. 图片压缩的另一种实现(3)
  12. 《DSP using MATLAB》示例Example4.2
  13. 2021“数维杯”国际大学生数学建模竞赛B题思路
  14. C#反编译工具ilspy下载地址
  15. vue-cli脚手架安装
  16. AutoCAD CSCAD注册命令类型的控制
  17. 免费PDF批量转换图片工具
  18. python画厢式图_用matplotlib画箱体图(boxplot)
  19. GIT 修改用户名和密码
  20. 线程池详解:线程池的七大参数及运行流程

热门文章

  1. 科研文献|圈养和类人猿微生物组的共同多样化
  2. QIIME 2用户文档. 13数据评估和质控Evaluating and controlling(2018.11)
  3. R语言使用for循环绘制多个模型的DCA(Decision Curve Analysis)曲线并保存特定分辨率的DCA曲线的结果文件
  4. R语言当前目录获取及设置函数(getwd setwd)实战
  5. R语言sample函数数据对象采样实战
  6. 使用t-SNE算法对数据进行降维并可视化实战,与KernalPCA、LLE对比降维可视化的效果
  7. 线性支持向量机、线性可分支持向量机、非线性支持向量机是怎么区分的?
  8. 单细胞RNA降维之UMAP
  9. de novo assembly是新的基因组装配
  10. 分析方法升级三代测序辅助,优化无参转录组测序策略