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

练习

相关推荐
Blossom.11817 小时前
移动端部署噩梦终结者:动态稀疏视觉Transformer的量化实战
java·人工智能·python·深度学习·算法·机器学习·transformer
轻微的风格艾丝凡17 小时前
卷积的直观理解
人工智能·深度学习·神经网络·算法·计算机视觉·matlab·cnn
田梓燊20 小时前
红黑树分析 1
算法
晚风吹长发20 小时前
二分查找算法+题目详解
c++·算法·二分查找
悠悠~飘21 小时前
18.PHP基础-递归递推算法
算法·php
pilgrim5321 小时前
结合 Leetcode 题探究KMP算法
算法·leetcode
罗义凯21 小时前
其中包含了三种排序算法的注释版本(冒泡排序、选择排序、插入排序),但当前只实现了数组的输入和输出功能。
数据结构·c++·算法
kevien_G11 天前
JAVA之二叉树
数据结构·算法
春蕾夏荷_7282977251 天前
c++ easylogging 使用示例
c++·log·easylogging
syt_biancheng1 天前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法