Dijkstra单源点最短路径算法
学习参考:
Dijkstra算法(单源最短路径)
最短路径—Dijkstra算法和Floyd算法
使用的图结构:

邻接矩阵:
-1 20 -1 25 80
-1 -1 40 -1 -1
-1 -1 -1 -1 10
-1 -1 20 -1 50
-1 -1 -1 -1 -1
代码:
void Dijkstra(){//单源点最短路径
int i,j;
boolean s[]=new boolean[vexnum];
int dist[]=new int[vexnum];
int prev[]=new int[vexnum];
int v=0;
for(i=0;i<vexnum;i++){
dist[i]=adjMatrix[v][i];
s[i]=false;
if(dist[i]>0){
prev[i]=v;
}else{
prev[i]=-1;
}
}
dist[v]=0;
s[v]=true;
for(i=1;i<vexnum;i++){
int u=v;
int min=0x7FFFFFFF;
for(j=0;j<vexnum;j++){//把dist中的最小值加入S
if(s[j]==false && (dist[j]<min) && dist[j]!=-1){//j不在s中 ,j比最小值小
u=j;
min=dist[j];
}
}
s[u]=true;//结点u加入S中
//利用结点u更新dist
for(j=0;j<vexnum;j++){
if(s[j]==false && adjMatrix[u][j]!=-1){//j不在s中,并且u->j连通
int newdist=dist[u]+adjMatrix[u][j];//v->u + u->j
if(newdist<dist[j] || dist[j]==-1){
dist[j]=newdist;
prev[j]=u;
}
}
}
}
//-1 0 3 0 2
for(i=1;i<vexnum;i++){
System.out.print(i);
int t=prev[i];
while(t!=-1){
System.out.print("<--"+t);
t=prev[t];
}
System.out.println();
}
}
输出:
1<--0
2<--3<--0
3<--0
4<--2<--3<--0
另外一个测试数据:
可视化图结构:

邻接矩阵:
-1 -1 10 -1 30 100
-1 -1 5 -1 -1 -1
-1 -1 -1 50 -1 -1
-1 -1 -1 -1 -1 10
-1 -1 -1 20 -1 60
-1 -1 -1 -1 -1 -1
输出:
1
2<--0
3<--4<--0
4<--0
5<--3<--4<--0
Dijkstra单源点最短路径算法的更多相关文章
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 【模板 && 拓扑】 Dijkstra 单源最短路径算法
话不多说上代码 链式前向星233 #include<bits/stdc++.h> using namespace std; ,_max=0x3fffffff; //链式前向星 struct ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- Dijkstra——单源最短路径
算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...
- 单源点最短路径的Dijkstra算法
在带权图(网)里,点A到点B所有路径中边的权值之和为最短的那一条路径,称为A,B两点之间的最短路径;并称路径上的第一个顶点为源点(Source),最后一个顶点为终点(Destination).在无权图 ...
- Bellman-Ford & SPFA 算法——求解单源点最短路径问题
Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题.Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好 ...
- 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(一)
一.算法介绍 迪杰斯特拉算法(英语:Dijkstra's algorithm)由荷兰计算机科学家艾兹赫尔·迪杰斯特拉在1956年提出.迪杰斯特拉算法使用了广度优先搜索解决赋权有向图的单源最短路径问题. ...
- 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(二)
一.基于邻接表的Dijkstra算法 如前一篇文章所述,在 Dijkstra 的算法中,维护了两组,一组包含已经包含在最短路径树中的顶点列表,另一组包含尚未包含的顶点.使用邻接表表示,可以使用 BFS ...
- 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)
哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...
随机推荐
- oracle数据库安装过程中的疑惑—该记录是本人以前写在微博上的文章
转行IT初学者关于oracle数据库整理第一次安装数据库的时候都是按照操作步骤一步一步进行安装,并没有对操作步骤产生过怀疑或者为什么要这么进行操作?2017年12月8日再次阅读安装操作说明书的时候有了 ...
- Java8 新特性 Data Time API
Java8新的日期类型 在Java8以前,Date日期API对我们非常的不友好,它无法表示日期,只能以毫秒的精试来表示时间,并且可以修改,他的线程还不是安全的.所以Java8中引入了全新的日期和时间A ...
- ubutun16.04 安装编译glog日志库
glog 是一个 C++ 日志库,它提供 C++ 流式风格的 API.在安装 glog 之前需要先安装 gflags,这样 glog 就可以使用 gflags 去解析命令行参数(可以参见gflags ...
- MySQL中的 redo 日志文件
MySQL中的 redo 日志文件 MySQL中有三种日志文件,redo log.bin log.undo log.redo log 是 存储引擎层(innodb)生成的日志,主要为了保证数据的可靠性 ...
- flutter-初识(基础语法)
前言:笔者学过 java,刚刚接触 flutter,记录下基本的一些语法. 一.认识Flutter Flutter 是 google 推出的,使用的 Dart 语言,它可以跨平台实现 Android ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- 【ELK】elasticsearch使用bulk 导入批量的数据集文件报错:Validation Failed: 1: no requests added
执行命令如下: curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty --data-binary @/cjf/es/e ...
- 深入V8引擎-初始化默认Platform
本来寻思着写一篇"'Hello' + ', World'"是怎么从JS代码编译然后输出的,然而compile过程的复杂性远超我的想象,强上怕会走火入魔,还是老老实实先回家种田,找点 ...
- Postman安装使用
下载链接:https://www.getpostman.com/downloads/ 选择下载的版本 postman基础功能介绍 collection在postman里面相当于一个文件夹,可以把同一个 ...
- C#环境配置
由于C#是,Net框架的一部分,且用于编写.Net应用程序,所以我们需先了解下C#与.Net框架之间的关系. .Net框架(.Net Framework) .Net框架是一个创新的平台,能帮你编写出下 ...