当前位置: 首页 > news >正文

leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝

题目

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

题目分析

给定一个城市图,每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径,但这条路径最多只能经过 k 个中转站。你需要返回这种路径的最低价格,如果不存在这样的路径,则返回 -1。

输入:

n:城市的数量
flights:航班的列表,每个航班用 [fromi, toi, pricei] 表示,表示从城市 fromi 到城市 toi 的航班价格为 pricei
src:起点城市
dst:终点城市
k:最多经过的中转站数

输出:

最便宜的价格,如果没有满足条件的路径,则输出 -1

思路分析

我看到这道题第一时间想的就是dijkstra算法,因为我也不会别的算法。
对于k的限制,我想到可以在优先队列中维护一个当前层级的变量,当到达的层级大于k时,就不再扩展了。

但是我没考虑到k的限制可能会导致最短路径无法达成,并且由于dijkstra算法的性质,其他路线也被直接丢弃了

于是我尝试不使用visited数组记录访问过的节点,将每个节点的后继节点都加入队列中,只有层级大于k时,才会跳过。此时算法退化成了变体的广度优先搜索算法,会搜索每一条在中转数在k内的路径。

但是,当数据量大了之后,显然这个算法会超时。

继续思考,发现dijkstra算法找到的是最优路径,但是其中转节点可能很多,而真正的路径只可能在中转节点比最优路径少的路径里,其他中转节点多于最优路径的路径完全可以剪枝,因为他们的费用不可能更低。

按照这个思路,只需要维护一个每个节点的最小中转数,任何多于最小中转数的路径都可以剪枝,因为对于每一个被剪枝的路径来说,在其之前都已经有至少一条路径价格比它低的同时中转数还要小于它

代码

class Solution:def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:# 建立邻接表maps=[[]  for _ in range(n)]for edge in flights:maps[edge[0]].append(edge[1:])#最小堆模拟优先队列,(价格,节点编号,层级)pq=[(0,src,0)]#当前每个节点的中转数记录visit=[n+1]*nwhile pq:w,p,c=heappop(pq)#过滤超过层级k的节点,剪枝中转城市多余当前节点记录的点if c>=visit[p] or c>k+1:continueif  p == dst:return w# 直接等就可以,比它大的到不了这一步visit[p]=c# 将后继节点加入优先队列for point in maps[p]:heappush(pq,(w + point[1],point[0],c+1))return  -1

提交

一直交刷成绩QAQ
在这里插入图片描述


2024/8/8

相关文章:

leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝

题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图,每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径,但这条路径最多只能经过 k 个中转站。你需要返回这…...

赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!

八月开端,由知无不言与xmars和钱老师课堂联合主办的2024年AI科技大会暨亚马逊新增长大会在深圳宝安顺利开展,为期2天的跨境峰会吸引了上千位优秀的卖家朋友前来感受一场盛夏大狂欢。在本次跨境峰会里,邀请了多位不同领域的先锋人物&#xff0…...

Nacos-配置中心

1.为什么要使用配置中心&#xff1f; 2.常用的配置中心组件&#xff1f; 3.如何使用&#xff1f; 在配置中心创建配置文件 启动一个单列的nacos服务 点击发布 在微服务中使用 添加依赖 <!--nacso配置中心的依赖--><dependency><groupId>com.alibaba.cloud&l…...

ava中的文件操作、IO流、递归和字符集

目录 File类的使用 创建File对象 创建和删除文件 遍历文件夹 IO流 字节流 读取文件 字符流 读取文本文件 写入文本文件 递归 计算阶乘 文件搜索 字符集 编码与解码 File类的使用 在Java中&#xff0c;File类用于表示文件和目录的路径。它提供了一些方法来创建、删…...

生成式人工智能安全评估体系构建

文章目录 前言一、人工智能安全治理的现状1.1 国际安全治理现状1.2 国内安全治理现状二、构建人工智能安全评估体系1.1 需要对生成式人工智能技术的安全性、可靠性、可控性、公平性等维度进行全面的考量。1.2 应对生成式人工智能全维度风险。1.3 在体系化应对框架中,应明确法律…...

NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测+交叉验证

NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测交叉验证 多输入单输出&#xff09; matlab代码 程序已调试好&#xff0c;无需更改代码替换数据直接使用&#xff01;&#xff01;&#xff01;数据格式为excel格式&#xff01;需要定制可私&a…...

synchronized实现原理及优化

一、概述 线程安全在并发编程中是重要关注点&#xff0c;造成线程安全问题的主要诱因有两个&#xff1a;一是存在共享数据&#xff08;也称临界资源&#xff09;&#xff0c;二是存在多个线程共同操作共享数据。synchronized关键字能够保证在同一时刻只有一个线程可以执行某个…...

NLP 之词的表示与语言模型

表示的基本原理&#xff1a; 机器无法理解文字&#xff0c;却能进行复杂的数学运算——神经网络只要够深、够复杂&#xff0c;就能拟合足够复杂的数学模式。把文字嵌入&#xff08;embed&#xff09;到一个向量空间中去。 词表示&#xff08;Word Representation&#xff09;…...

每天一个数据分析题(四百七十一)- 假设检验

下列对假设检验的描述合理的是? A. 备择假设是研究者想收集证据予以支持的假设 B. 原假设是研究者想收集证据予以推翻的假设 C. 原假设是研究者想收集证据予以支持的假设 D. 备择假设是研究者想收集证据予以推翻的假设 数据分析认证考试介绍&#xff1a;点击进入 题目来…...

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计

文章目录 1. 五种数据访问模式1.1 在线访问1.2 DAO1.3 DTO1.4 离线数据模式1.5 对象/关系映射 (O/R Mapping) 2. 工厂方法模式在数据访问层应用3 ORM、Hibernate与CMP2.0设计思想3.1 ORM3.2 Hibernate1&#xff09;概述2&#xff09; Hibernate的架构&#xff08;2023年的考题&…...

【视觉SLAM】 十四讲ch7习题

简介 本文主要内容是《视觉SLAM十四讲》&#xff08;第二版&#xff09;第7章的习题解答&#xff0c;并介绍了在解答习题中的一下思考和总结的经验。本文代码部分参考了&#xff1a;HW-of-SLAMBOOK2 1、除了本书介绍的ORB特征点&#xff0c;你还能找到哪些特征点&#xff1f;…...

K-近邻算法(二)

三、 kd 树 问题导⼊&#xff1a; 实现k 近邻算法时&#xff0c; 主要考虑的问题是如何对训练数据进⾏快速 k 近邻搜索。这在特征空间的维数⼤及训练数据容量⼤时尤其必要。 k 近邻法最简单的实现是线性扫描&#xff08;穷举搜索&#xff09;&#xff0c;即要计算输⼊实例与…...

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件&#xff08;均分布局&#xff09; UniformGrid和Grid有些相似&#xff0c;只不过UniformGrid的每个单元格面积都是相等的&#xff0c;不管是横向的单元格&#xff0c;或是纵向的单元格&#xff0c;它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…...

ANTSDR E310

ANTSDR E310是一款由微相科技有限公司&#xff08;MicroPhase&#xff09;推出的软件无线电&#xff08;SDR&#xff09;平台&#xff0c;专为现场部署设计。以下是对ANTSDR E310的详细介绍&#xff1a; 一、主要特点 独立运行的软件无线电&#xff1a;ANTSDR E310具备独立运…...

MySQL 5.7 DDL 与 GH-OST 对比分析

作者&#xff1a;来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理&#xff0c;然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面&#xff0c;对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…...

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求 从网易新闻的科技模块爬取今日热点的列表数据&#xff0c;其中包括标题、图片、标签、发表时间、路径、详细文本内容&#xff0c;最后导出这些列表数据到Excel中。 网易科技新闻网址&#xff1a;https://tech.163.com 2. 解决步骤 2.1 前期准备 爬虫脚本中需要引用…...

软件设计之HTML5

软件设计之HTML5 【狂神说Java】HTML5完整教学通俗易懂 学习内容&#xff1a; 软件开发技能点参照&#xff1a;软件开发&#xff0c;小白变大佬&#xff0c;这套学习路线让你少走弯路是认真的&#xff0c;欢迎讨论 软件开发技能点参照&#xff1a;Java学习完整路线&#xff…...

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统&#xff0c;其中元数据集群是核心组件之一&#xff0c;负责管理整个集群的元数据信息。元数据包括数据库…...

白骑士的Matlab教学进阶篇 2.5 Simulink

Simulink是MATLAB的扩展工具&#xff0c;提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统设计与仿真、与MATLAB的集成。 Simulink简介与基本使用 什么是Simuli…...

linux安装anaconda

参考 如何在Linux服务器上安装Anaconda&#xff08;超详细&#xff09;_linux安装anconda-CSDN博客 官网 Index of / 安装网站 https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Lin…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...