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

练习

相关推荐
KyollBM5 分钟前
【Luogu】P9809 [SHOI2006] 作业 Homework (根号算法)
算法
小六子成长记6 分钟前
【C++】:list容器全面解析(超详细)
c++·windows·list
jmxwzy10 分钟前
leetcode274.H指数
算法
IT灰猫28 分钟前
C++轻量级配置管理器升级版
开发语言·c++·设计模式·配置管理·ini解析
纪元A梦34 分钟前
贪心算法应用:信用评分分箱问题详解
java·算法·贪心算法
过河卒_zh15667662 小时前
9.13AI简报丨哈佛医学院开源AI模型,Genspark推出AI浏览器
人工智能·算法·microsoft·aigc·算法备案·生成合成类算法备案
D.....l2 小时前
冒泡排序与选择排序以及单链表与双链表
数据结构·算法·排序算法
sinat_286945192 小时前
Case-Based Reasoning用于RAG
人工智能·算法·chatgpt
Athenaand2 小时前
代码随想录算法训练营第50天 | 图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
算法·图论