关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】

目录

一、本题题目

二、本题代码

三、关键思路

四、注意事项

五、图论角度

六、Dijkstra算法的两种版本求最短路径的区别

七、为什么要用这个堆优化版

八、自我感觉


一、本题题目

// 展示完整题目

二、本题代码

// 展示完整代码

三、关键思路

1、用小顶堆优化,用邻接表存储

2、三步走

// 找距离源点最近的且未访问过的节点

// 标记已访问过的

// 更新未访问过的节点到源点的最短路径

四、注意事项

1、关于各种加入操作(C++语法)

// 数组用push_back()

// 队列、栈、优先级队列用push()

// 集合和map映射用insert()

2、operator()这是一个整体的函数调用运算符

3、如果代码里要显式调用构造函数,结构体里面要写出来

4、顶点编号是从1开始的,初始化起点的时候要注意初始化的是1

// 不是0

5、获取优先级队列的队头的时候要注意,要用一个数值对来接收

6.如果有问题要写调试代码段

7.这个版本的代码有很多变量、结构体、数组之类的,各种含义要搞清楚

// 比如cur的含义是当前遍历到的距离源点最近的且未访问过的节点数值对

// cur.first的含义是当前遍历到的距离源点最近的且未访问过的节点编号

五、图论角度

1、点的角度(例如:Prim算法求最小生成树,Dijkstra算法求最短路径)

2、边的角度(例如:Kruskal算法求最小生成树,堆优化版的Dijkstra算法求最短路径)

六、Dijkstra算法的两种版本求最短路径的区别

1、Dijkstra朴素版

【循环 + 邻接矩阵】

2、Dijkstra堆优化版

【小顶堆 + 邻接表】

// C++里面实现小顶堆用的是优先级队列

// 优先级队列可以自定义小顶堆/大顶堆

七、为什么要用这个堆优化版

时间复杂度更低

八、自我感觉

1、比朴素版的复杂,但是效率更好。果然好东西都是不那么容易拿到的。

2、小顶堆的相关操作有待提升,每次要写小顶堆的东西的时候,都重新自己写一遍

3、两种版本的时间复杂度

朴素版的时间复杂度是O(

堆优化版的时间复杂度是O(eloge) // e是边的数量,有log是因为用堆排序的时候会出现log

相关推荐
啥都想学点的研究生10 分钟前
一篇文章讲清楚:线性回归问题的求解——正规方程法
算法·机器学习·线性回归
青少儿编程课堂19 分钟前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康43 分钟前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备1 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法
小小晓.1 小时前
C++ 值类别与完美转发深度剖析:从左值右值到 std::forward 源码解密
开发语言·c++·算法
怕浪猫2 小时前
用了两年 AI 编程工具后,我重新理解了什么是「资深工程师」
算法·面试·架构
hetao17338372 小时前
2026-08-27~29 hetao1733837 的刷题记录
c++·算法
云淡风轻~窗明几净2 小时前
宇宙管理学猜想
算法·图论
春风解人意2 小时前
从零开始学习嵌入式P28----线程
c语言·学习·算法
luj_17682 小时前
合法避税与投资评估实战指南
c语言·开发语言·网络·经验分享·算法