自己动手写数据结构总目录: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++