弗洛伊德算法--最短路径
2014-05-13 21:52
204 查看
算法如下:
import java.util.Scanner;
public class Floyd {
public static void main(String[] args) {
// 测试数据
// 9 16
// 0 1 1
// 0 2 5
// 1 3 7
// 1 4 5
// 2 4 1
// 2 5 7
// 1 2 3
// 3 4 2
// 4 5 3
// 3 6 3
// 4 6 6
// 4 7 9
// 5 7 5
// 6 7 2
// 6 8 7
// 7 8 4
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();
int edges = scan.nextInt();
int[][] arr = new int[m][m];
for(int i =0;i<m;i++){
for(int j=0;j<m;j++){
if(i==j){
arr[i][j]=0;
}else{
arr[i][j]=65535;
}
}
}
int begin,end,weight;
for(int i=0;i<edges;i++){
begin=scan.nextInt();
end=scan.nextInt();
weight=scan.nextInt();
arr[begin][end] = weight;
arr[end][begin] = weight;
}
//测试0到8
shortestPath_Floyd(arr,0,8);
}
public static void shortestPath_Floyd(int[][] arr,int begin,int end){
int[][] pathMatirx
9565
= new int[arr.length][arr.length] ;
int[][] shortPathTable = new int[arr.length][arr.length];
for(int v=0;v<arr.length;v++){
for(int w=0;w<arr.length;w++){
shortPathTable[v][w]=arr[v][w];
pathMatirx[v][w]=w;
}
}
for(int k=0;k<arr.length;k++){
for(int v=0;v<arr.length;v++){
for(int w=0;w<arr.length;w++){
if(shortPathTable[v][w]>shortPathTable[v][k]+shortPathTable[k][w]){
shortPathTable[v][w]=shortPathTable[v][k]+shortPathTable[k][w];
pathMatirx[v][w] = pathMatirx[v][k];
}
}
}
}
int mark;
System.out.println("begin:"+begin+" "+"end:"+end+" "+"weight:"+shortPathTable[begin][end]);
mark = pathMatirx[begin][end];
System.out.print(begin);
while(mark!=end){
System.out.print("-->"+mark);
mark=pathMatirx[mark][end];
}
System.out.println("-->"+end);
}
}
相关文章推荐
- 最短路径(弗洛伊德算法)- 数据结构和算法65
- 最短路径(弗洛伊德算法)- 数据结构和算法65
- 用弗洛伊德算法求赋权图的两点间的最短路径的长度
- 【原创】求最短路径-弗洛伊德算法
- 弗洛伊德算法-----最短路径算法(一)
- 弗洛伊德算法(求各顶点间最短路径):可打印最短路径
- 每队顶点之间的最短路径(弗洛伊德算法)
- 最短路径(弗洛伊德算法)
- C++代码,数据结构-最短路径(两种情况)(迪杰斯特拉算法和弗洛伊德算法)
- 最短路径--弗洛伊德算法
- Floyd Warshall 弗洛伊德算法---最短路径
- 图--最短路径--弗洛伊德算法
- 图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法)
- 数据结构图之四(最短路径--弗洛伊德算法)
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 全源最短路径之弗洛伊德算法(C语言)
- 最短路径(弗洛伊德算法)
- 弗洛伊德算法(每一对顶点之间的最短路径)
- 最短路径—弗洛伊德算法
- 弗洛伊德算法求最短路径