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

练习

相关推荐
YuTaoShao18 小时前
【LeetCode 每日一题】1984. 学生分数的最小差值
算法·leetcode·排序算法
Aurora@Hui18 小时前
FactorAnalysisTool 因子分析工具
人工智能·算法·机器学习
wen__xvn18 小时前
基础算法集训第06天:计数排序
数据结构·算法·leetcode
(; ̄ェ ̄)。18 小时前
机器学校入门(十三)C4.5 决策树,CART决策树
算法·决策树·机器学习
却道天凉_好个秋18 小时前
c++ 四叉树
c++·hevc·四叉树
王老师青少年编程18 小时前
信奥赛C++提高组csp-s之倍增算法思想及应用(2):LCA
c++·lca·csp·信奥赛·csp-s·提高组·倍增算法
CSDN_RTKLIB18 小时前
【编码实战】源文件不同编码控制台输出过程
c++
Ll130452529818 小时前
Leetcode哈希表篇
算法·leetcode·散列表
独自破碎E18 小时前
【字节面试手撕】大数加法
java·算法
鱼跃鹰飞19 小时前
LeetCode热题100: 49.字母异位词分组
java·数据结构·算法·leetcode