太多的理论概念没有太多的意思,学习一种算法最后要变成自己的理解,复杂的技术简单化,图论算法有很多,包括图的广度优先,深度优先,图的最小生成树,迪杰斯特拉算法等,这里的弗洛伊德算法可以求图中任意两个节点的最小距离,同时还要求两个节点之间最小距离经过的路径,怎么实现的呢?
代码如下:
public class FuloyideDemo {
private int MAX=Integer.MAX_VALUE;
private int[][] grape={ //这里我直接用矩阵来表示图中连个节点的距离,0表示是本节点到自身,MAX表示两个节点的是没有直接连线的。
{0,2,1,4,MAX,MAX,MAX},
{2,0,MAX,MAX,5,MAX,MAX},
{1,MAX,0,MAX,MAX,8,MAX},
{4,MAX,MAX,0,9,6,MAX},
{MAX,5,MAX,9,0,7,11},
{MAX,MAX,8,6,7,0,13},
{MAX,MAX,MAX,MAX,11,13,0}
};
public static void main(String[] args){
FuloyideDemo demo=new FuloyideDemo();
demo.getResult();
}
/**
* 初始化两个矩阵
*distance矩阵表示图中任意两个节点的距离,这里初始化为grape矩阵
*distance[i][j] 表示的是节点i到节点j的距离值
*p矩阵表示的是驱动矩阵,用来求两个节点最短距离的路径
*P[i][j]表示的是节点i到节点j,必定经过p[i][j]这个节点。
*/
public void getResult(){
int length=grape.length;
int[][] p=new int[length][length];
int[][] distance=new int[length][length];
for(int i=0;i<length;i++){
for(int j=0;j<length;

本文介绍了弗洛伊德算法在求解图中任意两个节点的最小距离及其路径上的应用。通过简洁的核心代码展示算法原理,并强调理解算法本身的重要性,而非过于关注图的表示方式。分享旨在帮助读者理解和掌握该算法。
最低0.47元/天 解锁文章
2489

被折叠的 条评论
为什么被折叠?



