【图论】Dijkstra

Dijkstra


前置知识


思路

Dijkstra 算法是一种求正权图单源最短路的算法。

注意到BF最大的缺陷在于其对于一个点的松弛方式太暴力了。

注意到有正权这个条件。

那么我们发现,只要选取当前距离最小的点,该点不可能被松弛。

于是使用一个小根堆维护距离即可。


算法参数

  • 时间复杂度: O ( m log ⁡ n ) O(m\log n) O(mlogn)
  • 空间复杂度: O ( n + m ) O(n+m) O(n+m)

实现代码

cpp 复制代码
struct node{int u,d;};
bool operator<(node a,node b){return a.d>b.d;}
void Dijkstra(int s){
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0;
    priority_queue<node> q;
    q.push({s,0});
    while (!Q.empty()){
        node cur=q.top();
        q.pop();
        int u=fr.u,k=fr.d;
        if (k!=d[u]) continue;
        for (node e:G[u]){
            int v=e.v,w=e.w;
            if (d[u]+w<d[v]){
                d[v]=d[u]+w;
                q.push({v,d[v]});
            }
        }
    }
}

练习

相关推荐
同学小张5 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
轻抚酸~6 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
Yue丶越8 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
小白程序员成长日记8 小时前
2025.11.24 力扣每日一题
算法·leetcode·职场和发展
有一个好名字8 小时前
LeetCode跳跃游戏:思路与题解全解析
算法·leetcode·游戏
爱学习的小邓同学9 小时前
C++ --- 多态
开发语言·c++
AndrewHZ9 小时前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
蓝牙先生9 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
稚辉君.MCA_P8_Java13 小时前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法
稚辉君.MCA_P8_Java13 小时前
通义 插入排序(Insertion Sort)
数据结构·后端·算法·架构·排序算法