图论最短路:迪杰斯特拉Dijkstra算法及堆优化

本文介绍了Dijkstra算法,主要用于解决图论中的单源最短路径问题。原始算法复杂度为O(n^2),通过堆优化可以降低到O((n+m)×logn)。相较于可能被卡掉的SPFA算法,Dijkstra算法更加稳定可靠。文章简述了算法的基本思想,并提到堆优化在寻找最短边时的作用。最后,提供了实现该算法的代码示例。
摘要由CSDN通过智能技术生成

今天讲的算法出自这个人:

dijkstra大佬

好帅呀!

dijkstra算法用于单源最短路,就是在一张图中从一个点(一般是1)到所有点的最短路,n代表点数,m代表边数,朴素的dijkstra算法复杂度是 O O O(n2),堆优化后可以达到 O O O((n+m)×logn),最重要的是它不会像SPFA一样被卡掉,所以皮实好用呀!(关于SPFA,他死了)
dijkstra算法的主要思想是贪心,先把1加入点集,然后在所有与点集的连边中找到最短的,更新dis数组(表示当前最短的距离),然后把那条边连向的点加入点集,再进行过程,直到所有的点都在点集中时dis数组就是最后的答案
emmmm,之前说过了,这么算的话算法的复杂度是n方的,我们还可以堆优化,在之前的过程中,我们需要在所有连边中找到最短的,这个可以用堆优化来完成。
所以奉上代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10,MAXM=2e5+10;
int n,m,s;
int x,y,c
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值