【图论】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]});
            }
        }
    }
}

练习

相关推荐
꧁Q༒ོγ꧂18 小时前
C++ 入门完全指南(四)--函数与模块化编程
开发语言·c++
byzh_rc18 小时前
[认知计算] 专栏总结
线性代数·算法·matlab·信号处理
汉克老师18 小时前
GESP2025年12月认证C++八级真题与解析(判断题8-10)
c++·快速排序··lcs·gesp八级·gesp8级
qq_4335545418 小时前
C++ manacher(求解回文串问题)
开发语言·c++·算法
歌_顿18 小时前
知识蒸馏学习总结
人工智能·算法
闲看云起19 小时前
LeetCode-day6:接雨水
算法·leetcode·职场和发展
没学上了19 小时前
VLM_一维离散卷积与二维离散卷积(还是复习感觉还行)
算法
HL_风神19 小时前
设计原则之迪米特
c++·学习·设计模式
黛色正浓19 小时前
leetCode-热题100-贪心合集(JavaScript)
javascript·算法·leetcode
HL_风神19 小时前
设计原则之合成复用
c++·学习·设计模式