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

3.2.2 最短路径 堆优化版Djkstra算法

堆优化版 Dijkstra算法

Dijkstra优化方法:

小根堆存储1号点可以到达的每个节点的最短路径,直至拓展到n号点

例题 AcWing 850.Dijkstra求最短路 II

题目大意:

给定一个n 个点m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。求 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 − 1 。

数据范围:
1 ≤ n , m ≤ 1.5×10^5

0 ≤ e ≤ 10000
e 是边长。

思路:

节点个数和边的个数相差不多,为稀疏图,使用邻接表存储,并用堆优化版Dijkstra算法计算最短路径

Solved:

#include <bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define fi first
#define se secondusing namespace std;
const int N=1e5+10,INF=0x3f3f3f3f;//邻接表
int h[N],e[N],w[N],ne[N],idx;int dist[N];//存储最短路径
int st[N];//确定是否最短
int n,m;//图的加边
void add(int x,int y,int z){e[idx]=y,w[idx]=z;ne[idx]=h[x];h[x]=idx++;
}int Djkstra()
{//初始化distmemset(dist,0x3f,sizeof(dist));dist[1]=0;//堆优化Dijkstra//first:距离 second:节点编号priority_queue<PII,vector<PII>,greater<PII>> q;q.push({0,1});while(!q.empty()){auto t=q.top();q.pop();//ver:点编号 dis:距离int ver=t.se,dis=t.fi;for(int i=h[ver];i!=-1;i=ne[i]){int j=e[i];//j:下个点编号//如果1号点走该较短路径 到达下个目标点之间距离//小于下个点与1号点之间距离,更新dist[下个点],qif(dis+w[i]<dist[j]){dist[j]=dis+w[i];q.push({dist[j],j});}}}if(dist[n]==INF) return -1;return dist[n];
}signed main()
{//初始化邻接表memset(h,-1,sizeof(h));cin>>n>>m;while(m--){int x,y,z;cin>>x>>y>>z;add(x,y,z);}cout<<Djkstra()<<endl;return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 快速解密哈希算法利器Hasher:解密MD5、SHA256、SHA512、RIPEMD160等最佳工具
  • ChatTTS文本转语音本地部署结合内网穿透实现远程使用生成AI音频
  • sql注入安全作业
  • LearnOpenGL-入门章节学习笔记
  • C语言程序设计-[5] 输入输出语句
  • ShardingSphere 内核工作原理
  • 极简聊天室-websocket版(双向通信)
  • 数据科学家必须掌握的12个Python功能
  • pxe自动安装linux
  • 虚拟机连接xshell的三种方式
  • ReentrantLock的阻塞性、可中断性
  • 捉虫笔记(二)之 杀软请你自重点
  • Python 基础教程:List(列表)的使用
  • .NET周刊【7月第4期 2024-07-28】
  • LabVIEW在DCS中的优势
  • FineReport中如何实现自动滚屏效果
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript的使用你知道几种?(上)
  • mysql 数据库四种事务隔离级别
  • mysql_config not found
  • 回顾2016
  • 两列自适应布局方案整理
  • 使用SAX解析XML
  • 王永庆:技术创新改变教育未来
  • 问题之ssh中Host key verification failed的解决
  • 小程序开发之路(一)
  • 一道面试题引发的“血案”
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 责任链模式的两种实现
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​TypeScript都不会用,也敢说会前端?
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (06)Hive——正则表达式
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (web自动化测试+python)1
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)jQuery 基础
  • (转)nsfocus-绿盟科技笔试题目
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net 使用ajax控件后如何调用前端脚本
  • .Net 知识杂记
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET性能优化(文摘)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @EnableAsync和@Async开始异步任务支持
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [04] Android逐帧动画(一)
  • [04]Web前端进阶—JS伪数组
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [BZOJ4016][FJOI2014]最短路径树问题