一.只有五行的算法--Floyd-Warshall
直接上代码
此算法是求多源最短路径
主要思想就是寻找一个中间点,使得两点通过中间点到达的距离更近
但是这种算法不能处理带有负权回路的图
负权回路指的是整个回路的权值为负
因为最短路径不存在,因为负数没有最小
参考啊哈算法148页
package 啊哈;
import java.util.Arrays;
import java.util.Scanner;
public class Floyed_Warshall多源最短路径 {
static int[][] e=new int[10][10];
static int n,m;
static int inf=99999999;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j) e[i][j]=0;
else e[i][j]=inf;//初始化,点与自己距离为0,其他点为无穷大
for(int i=1;i<=m;i++){
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
e[a][b]=c;
}//有向图
//Floyd-Warshall核心算法
for(int k=1;k<=n;k++)//给出中间点
for(int i=1;i<=n;i++)//给出出发点
for(int j=1;j<=n;j++)//给出终点
if(e[i][j]>e[i][k]+e[k][j])//判断出发点通过该中间点到达终点 是否比 原来距离短
e[i][j]=e[i][k]+e[k][j];//更新
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
System.out.print(e[i][j]+" ");
System.out.println();
}
}
}