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.但在很多情况下,数 ...
随机推荐
- 多项式 ln
多项式 ln 定义 \(给一多项式F(x),求G(x)\equiv lnF(x)\pmod x^n\) 前置知识 \(不定积分\) \(微分\) \(多项式乘法逆\) 推式子: \[\because ...
- JOSH是中国的“MicroEJ”~
很多人不了解JOSH,我们推荐大家去看看MicroEJ,我们是中国版的MICROEJ,下面的文章翻译自MICROEJ的官网,让大家直观的了解~ MICROEJ被定位为可连接对象的ANDROID™的小兄 ...
- SQL ------------ 对表中字段的操作 alter
ALTER TABLE 语句用于在现有表中添加.删除或修改列. 注意不同的数据库的语句有所不一样 增加和删除都基本一致. 进行修改表中字段的时候注意: 本文主要介绍 sqlserver/mysql/ ...
- Phaser也可以实现countdownLatch的功能
/** * 可用用phaser模拟countDownLatch * awaitAdvance方法:如果传入的参数和当前的phase相等,线程就阻塞住等待phase的值增加:否则就立即返回 */ pub ...
- 【题解】L 国的战斗续之多路出击 [P2129]
[题解]L 国的战斗续之多路出击 [P2129] 传送门: \(L\) 国的战斗续之多路出击 \([P2129]\) [题目描述] 给出 \(n\) 个坐标,\(m\) 个指令,指令处理顺序应是从后往 ...
- spring boot 在eclipse里启动正常,但打包后启动不起来
现象描述: spring boot 在eclipse里启动正常,但打包后启动不起来. 错误日志如下: D:\Project>java -jar MKKY_CMS.jar . ____ _ __ ...
- vue v-for 使用问题整理
今天使用v-for指令的时候遇到一个错误 [Vue warn]: Error in render: "TypeError: Cannot read property 'children' o ...
- jenkins 配置ssh remotes 报Failed to authenticate with public key
问题:jenkins配置ssh远程连接时候报 ERROR: Failed to authenticate with public key com.jcraft.jsch.JSchException: ...
- Angular4 innerHtml呈现富文本内容样式
import { Pipe, PipeTransform } from "@angular/core"; import { DomSanitizer } from '@angula ...
- Python的变量命名规则
1.只能用大小写字母与“_”(下划线) 2.数字不能用在开头,如:12tea 3.不能使用空格 4.C语言的变量命名规则如上相同