开发者社区> 小笨笨qaq> 正文

图论——最短路——Dijkstra算法

简介: 对图论有一定了解的人,一定知道最短路。 最短路算法一共有4中,严格来说是3种,应为最后一个是第3个的优化。 他们分别是: Floyd、Dijkstra、Bellman-Ford和SPFA算法 Floyd是最暴力的思想,这里就不在阐述。
+关注继续查看

对图论有一定了解的人,一定知道最短路。

最短路算法一共有4中,严格来说是3种,应为最后一个是第3个的优化。

他们分别是:

Floyd、Dijkstra、Bellman-Ford和SPFA算法

Floyd是最暴力的思想,这里就不在阐述。

今天,我们来讲Dijkstra算法,中文名迪杰斯特拉。

Dijkstra是单源最短路,也就是计算从一点出发,到各个点的距离。

这是一个类似贪心的算法,是否流程如下:

1.初始化dist [ v0 ] = 0;(v0是源点),其余dist为INF(正无穷,通常用0x3f3f3f3f表示)

2.找出未标记的、dist [ x ] 的最小 x ,标记 x;

3.扫描节点x的所有 出边 (x,y,z)表示x到y有权值为z的边。,若dist [ y ] > dist [ x ] + z,则使用 dist [ x ] + z 更新 dist [ y ];

4.重复2~3,直到所有点都被标记。

dist [ x ] 就是 v0 到 x 的最短路径。

代码实现:

 1 int a[3010][3010]/**/,d[3010],n,m;
 2 bool v[3010];//是否被访问
 3 void dijkstra(int v0)//源点
 4 {
 5     memset(d,0x3f3f3f3f,sizeof(d));//距离
 6     memset(v,0,sizeof(v));//初始化都未访问
 7     d[v0]=0;
 8     for(int i=1;i<n;i++)//重复n-1次 
 9     {
10         int x=0;
11         //找到未标记的dist最小的节点
12         for(int j=1;j<=n;j++)
13             if(!v[j]&&(x==0||d[j]<d[x]))//j为访问或dist[j]<dist[x]; 
14                 x=j;
15         v[x]=1;
16         //用x更新其他点 
17         for(int y=1;y<=n;y++)
18             d[y]=min(d[y],d[x]+a[x][y]/*x到y的边权值*/); 
19     }
20 }

这就是模板of Dijkstra,很好理解,大家要是有不理解的,也可以查相关资料,去了解更多的知识。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
最短路径之Dijkstra算法
最短路径之Dijkstra算法
13 0
最短路径之基于贪心算法的迪杰斯特拉dijkstra算法(有图解,含码源)
最短路径之基于贪心算法的迪杰斯特拉dijkstra算法(有图解,含码源)
30 0
前缀和和差分和dijkstra算法和二分算法和floyd算法
前缀和和差分和dijkstra算法和二分算法和floyd算法
29 0
m分别使用Dijkstra算法和Astar算法进行刚体机器人最短路径搜索和避障算法的matlab仿真,带GUI界面
m分别使用Dijkstra算法和Astar算法进行刚体机器人最短路径搜索和避障算法的matlab仿真,带GUI界面
76 0
最短路径——Dijkstra算法与Floyd算法
最短路径——Dijkstra算法与Floyd算法
61 0
基于A星和dijkstra算法的障碍物规避matlab仿真,可以设置行列数,随机产生障碍物
基于A星和dijkstra算法的障碍物规避matlab仿真,可以设置行列数,随机产生障碍物
105 0
狄克斯特拉(Dijkstra)算法求一个顶点到其余各个顶点的最短路径
狄克斯特拉(Dijkstra)算法求一个顶点到其余各个顶点的最短路径
42 0
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
利用Dijkstra算法求顶点v1到其他各顶点的最短路径Java实现
40 0
Java利用迪克斯特拉(Dijkstra)算法求拓扑关系最短路径
Java利用迪克斯特拉(Dijkstra)算法求拓扑关系最短路径
73 0
+关注
小笨笨qaq
小笨笨QAQ
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
阿里技术参考图册-算法篇
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载