学习参考:

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单源点最短路径算法的更多相关文章

  1. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  2. 【模板 && 拓扑】 Dijkstra 单源最短路径算法

    话不多说上代码 链式前向星233 #include<bits/stdc++.h> using namespace std; ,_max=0x3fffffff; //链式前向星 struct ...

  3. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  4. Dijkstra——单源最短路径

    算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...

  5. 单源点最短路径的Dijkstra算法

    在带权图(网)里,点A到点B所有路径中边的权值之和为最短的那一条路径,称为A,B两点之间的最短路径;并称路径上的第一个顶点为源点(Source),最后一个顶点为终点(Destination).在无权图 ...

  6. Bellman-Ford & SPFA 算法——求解单源点最短路径问题

    Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题.Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好 ...

  7. 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(一)

    一.算法介绍 迪杰斯特拉算法(英语:Dijkstra's algorithm)由荷兰计算机科学家艾兹赫尔·迪杰斯特拉在1956年提出.迪杰斯特拉算法使用了广度优先搜索解决赋权有向图的单源最短路径问题. ...

  8. 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(二)

    一.基于邻接表的Dijkstra算法 如前一篇文章所述,在 Dijkstra 的算法中,维护了两组,一组包含已经包含在最短路径树中的顶点列表,另一组包含尚未包含的顶点.使用邻接表表示,可以使用 BFS ...

  9. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

随机推荐

  1. Mysql load data infile 导入数据出现:Data truncated for column

    [1]Mysql load data infile 导入数据出现:Data truncated for column .... 可能原因分析: (1)数据库表对应字段类型长度不够或修改为其他数据类型( ...

  2. MySQL使用现状分析与优化

    前言 再紧张的裁员氛围,也不该影响你学习的心态.不要本末倒置,技术永远不会落后,只要你还在学习的道路上,没有后退. 数据库架构 目前生产环境RDS是多区可用架构.数据库实例发生计划内或计划外的中断时, ...

  3. Git系列四之在本地服务器搭建gitlab仓库管理(centeros环境下)

    1.Git仓库管理 现在本地已经创建了git仓库,又在gitlab上创建了一个git仓库,并且让这两个仓库进行远程同步,这样gitlab仓库既可以备份也可以与他人协作管理远程仓库以及根据需要推送或拉取 ...

  4. struts2拦截器的实现机制

    前言 最近老大让每周写一篇技术性的博客,想想也没啥写,就想着随便拿个以前的项目去研究研究五大框架的底层代码.本人水平有限,有不对的地方还望大家勿喷,指正! 开始之前先了解下strtus2的工作流程: ...

  5. .net core (领域事件,并发 for update) 工作内容记录

    这周工作,因为要对几个不同的表进行货币增加,锁定,所以 用了领域事件和并发 for update  ,先记录一下 领域事件 ,Dapper 事务 ,sql for update 这几个点 头大,最近工 ...

  6. Java8 Lamda的基本使用

    Lamda的基本使用 https://www.cnblogs.com/htyj/p/10133883.html https://segmentfault.com/q/1010000011200292 ...

  7. Java向MySQL新增记录时间误差问题

    参考文档 https://www.jianshu.com/p/115861aad147 https://blog.csdn.net/ai932820942/article/details/845804 ...

  8. 如何提高sql查询性能到达优化程序的目的

    1.关于SQL查询效率,100w数据 SQL查询效率 step by step -- setp 1.-- 建表create table t_userinfo(userid int identity(1 ...

  9. EIP Core2.0开源

    EIP Core2 权限管理系统 (交流群:495070603,作者:1039318332) 开源地址: https://gitee.com/sunzewei/eipcore2 https://git ...

  10. Bootstrap3-导航

    Bootstrap 导航 1. 定义导航组件 基本结构: <!-- 基本导航组件 --> <ul class="nav"> <li class=&qu ...