数据结构迪杰斯特拉Dijkstra算法详解及其Java实现


本文编写参照此文章: Dijkstra算法图文详解.

算法概念

Dijkstra算法的目标是计算出有向图中,某一点到其他点之间的最短距离,使用的是贪心算法的思想

算法过程

数据元素(本文使用的数组元素都从下标1开始使用,不使用下标0):
map:二维数组,有向图
distance:一维数组,distance[i]为从起点到结点i的最小距离
visited:一维数组,visited[i]为结点i是否访问过

每一次都从distance中选择最近的那一个可访问且未访问过的结点,令index为该结点下标,根据有向图map,从这个结点查找他能访问到的所有结点,查看distance[index] + map[index][j]与distance[j]的关系,如果更小则代表寻找到一条更短的路径,令distance[j] = istance[index] + map[index][j]

直接看实例:
有向图map如下
只有6个结点的有向图
初始的distance数组,每一个元素都是Integer.MAXVALUE
初始的vistited数组,每一个元素都是false

假设要寻找结点1 到其他结点之间的最短距离
在正式开始之前,设置起点的distance为0,即distance[1] = 0

首先从结点1开始,minDistance = distance[1] = 0,可访问的结点为结点2和结点
1到2的距离为0+1,小于distane[2],distane[2]=1
1到3的距离为0+12,小于distance[3],distane[3]=12

此时distance数组内容为:

 0, 		1, 		2, 		3,		4, 			5,		 	6
[2^31-1, 	0, 		1, 		12,		2^31-1, 	2^31-1, 	2^31-1]

此时结点1被标记为已访问,不能再使用结点1,排除结点1后,distance最小的结点为结点2,所以这次使用结点2

minDistance = distance[2] = 1,可访问的结点为结点3和结点4
2到3的距离为9,1 + 9小于distane[3],distane[2]=10
2到4的距离为3,1 + 3小于distance[4],distane[4]=4

此时distance数组内容为:

 0, 		1, 		2, 		3,		4, 		5,		 	6
[2^31-1, 	0, 		1, 		10,		4, 		2^31-1, 	2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值