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

练习

相关推荐
JieE21211 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2018 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树20 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4562 天前
C++进阶(1)——前景提要
c++
用户497863050732 天前
(一)小红的数组操作
算法·编程语言