
AcWing 850 Dijkstra求最短路 II
发布日期:2021-05-28 16:26:37
浏览次数:30
分类:精选文章
本文共 1423 字,大约阅读时间需要 4 分钟。
为了解决从一个有向图中找到1号点到n号点的最短距离的问题,我们可以使用优化后的Dijkstra算法。该算法通过优先队列来高效地处理图中的节点,确保每次处理都是当前已知的最短距离点。
啗台看阿知了的策略,提供了一份技术化的解答体验
第一部分:图的构建与初始化
使用邻接表存储图结构,每个节点对应一个列表,包含其所有的邻居和边的权重。
第二部分:Dijkstra算法的设计思路
采用优先队列来实现Dijkstra算法的关键部分。优先队列根据节点的当前最短距离进行排序,确保每次处理的节点是距离源节点最近的。为了减少多次处理同一个节点的开销,使用一个访问标记数组来记录节点是否已被处理。
第三部分:实现细节说明
优先队列的使用:优先队列中的每个元素包含两个信息——当前节点的编号和该节点的最短距离。每次从队列中取出距离最小的节点进行处理。
松弛操作:对于每个节点的邻居,计算经过当前节点后得到的新距离,若新距离小于邻居已记录的最短距离,则更新并将邻居加入队列。
处理重复节点:通过访问标记数组确保同一个节点只在其最短距离确定后再次被加入队列。
第四部分:代码实现
#include#include #include #include #include #include < prio_queue.h>using namespace std;const int maxn = 100005;int n, m;int d[maxn], h = -1; // 邻接表初始化h和e数组int e[...], w[...];int idx = 0;// 手写优先队列,节点的最短距离存储在d数组中int dijkstra() { // 初始化距离数组 d[1] = 0; for(int i = 2; i <= n; ++i) d[i] = INF; // 初始化优先队列 auto he = new int[maxn]; auto hp = new int[maxn]; auto ph = new int[maxn]; auto size = n; he[1] = 0; for(int i = 1; i <= n; ++i) { ph[i] = static_cast (i == 1 ? 0 : INF); hp[i] = i; } actual code implementation details of the Dijkstra algorithm with a heap optimization. return (d[n] == INF) ? -1 : d[n];}int main() { // 读取输入并初始化 // ... // 添加边的操作 // ... cout << dijkstra() << endl;}
总结
通过优化后的Dijkstra算法,我们可以高效地找到有向图中1号点到n号点的最短距离。该方法通过使用优先队列和访问标记数组,有效地减少了节点重复处理的次数,提升了算法性能。使用该方法可以在较大数据规模下完成任务,并且满足优化要求。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月12日 08时21分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++版浙大PAT乙级1069(20分)测试点3答案错误解决方法
2019-03-14
hive内部错误
2019-03-14
Error:scalac: bad option: '-make:transitive'
2019-03-14
微软xp壁纸rgb
2019-03-14
浏览器刷新页面
2019-03-14
代码错误信息,微信报错
2019-03-14
easyui日期处理(开始时间和结束时间)
2019-03-14
WPF画椭圆
2019-03-14
XMLHttpRequest对象的一个简单运用示例
2019-03-14
java文件上传
2019-03-14
DHCP跨网段分配IP地址
2019-03-14
10.多线程与并行
2019-03-14
Callable中call方法和Runnable中run方法的区别
2019-03-14
IDEA上移除项目(逻辑删除)
2019-03-14
Docker方式启动tomcat,访问首页出现404错误
2019-03-14
【蓝桥杯】 java 大学c组 省赛 1、隔行变色
2019-03-14
BIM轻量化——浏览器展示 | 利用unity
2019-03-14