自己动手写数据结构(8)——图的最短路径

本文详细介绍了数据结构中图的最短路径问题,讲解了Floyd算法和Dijkstra算法的原理、实现及优缺点。Floyd算法适用于多源最短路径,Dijkstra算法则解决单源最短路径。文章通过实例解析算法细节,并探讨了如何在不同的存储结构中实现这两个算法。
摘要由CSDN通过智能技术生成

自己动手写数据结构总目录:https://blog.csdn.net/qq_31709249/article/details/102962377
该文章的源代码仓库为:https://github.com/MeteorCh/DataStructure/blob/master/Java/DataStructure/src/Graph/AdjMatrixGraph.java

一、相关定义

最短路径定义: 从图的某一顶点(起点)出发,到达另一顶点(终点)的路径中,路径权值之和最小的路径最短路径。

二、Floyd算法

1.简介

Floy的算法是最简单最容易实现的最短路径算法(只求权值不记录路径的话只需要5行代码),其解决的是多源最短路径的问题,即通过该算法,可以计算得到图中每两点之间的最短路径。该算法的时间复杂度为n^3。

2.原理

在一个图中,要使两点间的距离缩短,唯一的办法是引进中间点。但是应该引入哪个点呢?最粗暴的办法是将所有点都测试一遍。每次引进中间点,将经过中间点后两点间的权值更新,使其成为引进后更小的一个。那其实每次引进都是在以前的引进的基础上进行的,每次都选择引进后的最小权重,最后的结果当然是最下的。

3.代码实现

在我以前实现的邻接矩阵图的基础上(博客见这里,源码见这里),来实现Floy算法,我这里只贴函数,如下:

 /**
     * 利用floyd算法计算start到end的最短路径
     * @param start 起点下标
     * @param end 终点下标
     */
    protected void floydMethod(int start,int end){
   
        int[][] weightMatrix=new int[vertexNum][vertexNum];
        int[][] path=new int[vertexNum][vertexNum];
        for (int i=0;i<vertexNum;i++){
   
            for (int j=0;j<vertexNum;j++)
            {
   
                weightMatrix[i][j]=matrix[i][j];
                path[i][j]=j;
            }
        }
        for (int k=0;k<vertexNum;k++){
   
            for (int i=0;i<vertexNum;i++
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeteorChenBo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值