太多的理论概念没有太多的意思,学习一种算法最后要变成自己的理解,复杂的技术简单化,图论算法有很多,包括图的广度优先,深度优先,图的最小生成树,迪杰斯特拉算法等,这里的弗洛伊德算法可以求图中任意两个节点的最小距离,同时还要求两个节点之间最小距离经过的路径,怎么实现的呢?
代码如下:
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[]