迪杰斯特拉(Dijkstra)算法之两点之间的最短距离问题

本文介绍了迪杰斯特拉(Dijkstra)算法,它是一种求解加权图中从特定出发点到其他顶点最短路径的算法。与弗洛伊德(Floyd)算法不同,Dijkstra算法以单个顶点为起点,逐步扩展并更新最短路径。算法通过维护距离、前驱顶点和访问状态来实现,最终得出从出发点到所有顶点的最短路径。代码实现和运行结果显示了算法的有效性。
摘要由CSDN通过智能技术生成

1.概述

(1)与弗洛伊德(Floyd)算法一样,迪杰斯特拉(Dijkstra)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,主要特点是以出发点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止

2. 迪杰斯特拉(Dijkstra)算法 与 弗洛伊德(Floyd)算法 的区别

(1)迪杰斯特拉(Dijkstra)算法:选定图中某一个顶点作为出发顶点,求出出发顶点到其他顶点的最短路径
(2) 弗洛伊德(Floyd)算法:图中的每一个顶点都是出发顶点,需要求出每一个被看成为出发顶点的顶点到其他顶点的最短路径

3.迪杰斯特拉(Dijkstra)算法的基本思路

(1)设置 int[] distance 记录出发点到图中各个顶点的距离,int[] preArray 记录图中各个顶点的前驱顶点,boolean[] visited 记录某个顶点是否已经被访问,LinkedList<String> linkedList 模拟队列,记录顶点的访问顺序(广度优先搜索思想 的体现),int[][] edgeArray 记录图中顶点之间的距离
(2)设置 i 为出发点,k 为由 广度优先搜索 得到的顶点,作为连接 i 与 j 的中间顶点,j 为其他顶点,如果存在 distance[k] + edgeArray[k][j] < distance[j] ,则更新 distance[j] ,即 distance[j] = distance[k] + edgeArray[k][j] ,代表 k 作为中间顶点时,出发点 i 到顶点 j 的最短距离为 distance[j] = distance[k] + edgeArray[k][j] ,这个最短距离是实时更新的,有可能通过其他中间顶点 k 得到更小的 distance[j] ,直到算法执行完毕,才会得到出发点到其他顶点的最短距离,如果 distance[k] + edgeArray[k][j] >= distance[j] , 则不做任何操作

4.代码实现

 

package com.zzb.algorithm.dijkstra;

import java.io.Serializable;
import java.util.LinkedList;

/**
 * @Auther: Administrator
 * @Date: 2020/3/28 13:20
 * @Description: 迪杰斯特拉算法 应用之 最短路径问题
 * 使用 图的广度优先搜索 解决问题
 */
public class Dijkstra {
    public static void 
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值