最短路之Dijkstra
Dijkstra算法:
Dijkstra是一种求解 非负权图 上单源最短路径的算法。
思路:将所有结点分为两个集合:已经确定最短路径的点(S)和未确定最短路长度的点集(T),开始时所有点都属于T
初始化dist[s]=0,其他点dis都为 +∞
然后重复操作:
- 在T集合中找到离源点最近的点u加入S
- 点u进行松弛操作(用u更新其他点的距离)(dis[j]=(dis[j]>dis[u]+w)?dis[u]+w:dis[j])
- 直到T集合未空 结束
实现
1.朴素做法O(n2)
2.优先队列版O(mlogm)
朴素版Dijkstra
用的邻接矩阵存的图
遍历dist数组 找到没用确定最短路距离源点最近的点 u 用u更新其他点
int g[N][N],dist[N];
bool st[N];
void dijkstra()
{
memset(dist,0x3f,sizeof d)//每个点先初始化为无穷远
for(int i=1;i<=n;i++)//遍历n个点
{
int u=0;
for(int j=1;j<=n;j++)//遍历dist数组 找到未确定最短路距离源点最近的点 u
{
if(!st[j]&&(u==0||d[j]<d[u]))
t=j;
}
//找到u
st[u]=true;
for(int i=1;i<=n;i++)//用u这个点更新其他点离源点的距离
{
dist[i]=min(dist[i],dist[u]+g[u][i]);
}
}
}
时间复杂度:O(N2)
堆优化版Dijkstra
priority_queue<PII,vector,greater>heap;//小根堆
int e[N],ne[N],h[N],W[N],idx;
int dist[N];
booo st[N];
void add(int a,int b,int c)
{
w[idx]=c,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void Dijkstra()
{
memset(dist,0x3f,sizeof dist);
dist[1]=0;
priority_queue<PII,vector<PII>,greater<PII>>heap;//小根堆
heap.push({0,1});//距离 编号
while(heap.size())
{
auto u=heap.top();//未确定最短距离 离源点最近的点
heap.pop();
int distance=u.first,id=u.second;
if(st[id])continue;
st[id]=true;
for(int i=h[id];i!=-1;i=ne[i])
{
int j=e[i];
if(d[j]>distance+w[i])
{
d[j]=distance+w[i];
heap.push(d[j],j);
}
}
}
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m;
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
}
return 0;
}
时间复杂度:mlogm
最短路之Dijkstra的更多相关文章
- 最短路计数——Dijkstra
题目: 给出一个N个顶点M条边的无向无权图,顶点编号为1−N.问从顶点1开始,到其他每个点的最短路有几条. ——传送门 受到题解的启发,用 Dijkstra A掉(手工代码) 思路: 1.无向无权图, ...
- UVA 11374 Airport Express 机场快线(单源最短路,dijkstra,变形)
题意: 给一幅图,要从s点要到e点,图中有两种无向边分别在两个集合中,第一个集合是可以无限次使用的,第二个集合中的边只能挑1条.问如何使距离最短?输出路径,用了第二个集合中的哪条边,最短距离. 思路: ...
- poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)
http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- hdoj 2544 最短路【dijkstra or spfa】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 最短路和次短路问题,dijkstra算法
/* *题目大意: *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和; * *算法思想: *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; ...
- BZOJ 3040: 最短路(road) [Dijkstra + pb_ds]
3040: 最短路(road) Time Limit: 60 Sec Memory Limit: 200 MBSubmit: 2476 Solved: 814[Submit][Status][Di ...
- HDu 2544 最短路【dijkstra & floyed & SPFA 】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 2066 ( 最短路) Floyd & Dijkstra & Spfa
http://acm.hdu.edu.cn/showproblem.php?pid=2066 今天复习了一下最短路和最小生成树,发现居然闹了个大笑话-----我居然一直写的是Floyd,但我自己一直以 ...
- poj 1797 最短路变形dijkstra
题意:题目大意:有n个城市,m条道路,在每条道路上有一个承载量,现在要求从1到n城市最大承载量,而最大承载量就是从城市1到城市n所有通路上的最大承载量 链接:点我 解题思路:其实这个求最大边可以近似于 ...
- HDU 2544 最短路(Dijkstra)
https://vjudge.net/problem/HDU-2544 题意: 输入包括多组数据.每组数据第一行是两个整数N.M(N<=100,M<=10000),N表示成都的大街上有几个 ...
随机推荐
- 3D捕鱼大富翁源码分析
今天接受了一个捕鱼的源码,技术栈采用: 客户端:Unity 服务端:Java 数据库:mysql 缓存:redis 先来几张成品图 编辑编辑 编辑编辑 编辑 在代码中看到有腾讯推广渠道, ...
- Linux设备模型:5、device和device driver
作者:wowo 发布于:2014-4-2 19:28 分类:统一设备模型 http://www.wowotech.net/device_model/device_and_driver.html 前言 ...
- Xilinx SDK 开发Linux APP
Xilinx SDK 开发Linux APP 步骤 配置环境变量 将工具链需要的程序的所在目录添加到 系统环境变量中,例如: D:\Xilinx_201803\SDK\2018.3\gnu\micro ...
- 【路径规划】 The Dynamic Window Approach to Collision Avoidance (附python代码实例)
引用与前言 参考链接 引用参考如下: 博客园解释:https://www.cnblogs.com/dlutjwh/p/11158233.html 这篇博客园写的贼棒!我当时就是一边对着论文一边对着他这 ...
- 对Transformer的一些理解
在学习Transformer这个模型前对seq2seq架构有个了解时很有必要的 先上图 输入和输出 首先理解模型时第一眼应该理解输入和输出最开始我就非常纠结 有一个Inputs,一个Outputs(s ...
- C#数据结构与算法入门教程,值得收藏学习!
前言 最近看到DotNetGuide技术社区交流群有不少小伙伴提问:想要系统化的学习数据结构和算法,不知道该怎么入门,有无好的教程推荐的?,今天大姚给大家推荐2个开源.免费的C#数据结构与算法入门教程 ...
- 【JavaScript】聊聊js中关于this的指向
前言 最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下Ja ...
- Maven Helper插件——实现一键Maven依赖冲突问题
业余在一个SpringBoot项目集成Swagger2时,启动过程一直出现以下报错信息-- An attempt was made to call a method that does not exi ...
- .NET 9 预览版 5 发布
微软在6月发布了.NET 9预览版的第五个版本.这个新版本的框架预计将在今年晚些时候正式发布,它是一个标准支持(STS)版本,将在2024年11月12日至2026年5月12日期间在多个操作系统上获得1 ...
- 可视化—D3学习笔记小小案例记录一下
D3全称是Data-Driven Documents数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,该库更接近底层,与 g2.echarts 不同,d3 能直接操作 s ...