标签:
1.有向图中,每对结点之间的最短路径
动态规划法:向前处理法:由前向后递推的方式求解列出的关系式
本题关键在于:
A[i][j]= A[i][j] < (A[i][k]+A[k][j]) ? A[i][j] : A[i][k]+A[k][j];
即A(i,j)=min{A(i,j), A(i,K)+A(k,j)}
package com.algothrim;
/*
* 两个结点之间的最短路径
*/
public class DynamicPlan {
public static void findShortestPath(int[][] cost,int n){
int[][] A=cost;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j]=cost[i][j];
int k;
/*
* (i,j)对于所有可能的结点对
* K:对于所有可能的中间结点
*/
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++){
A[i][j]= A[i][j] < (A[i][k]+A[k][j]) ? A[i][j] : A[i][k]+A[k][j];
}
System.out.println("结果输出:");
for(i=0;i<n;i++)
for(j=0;j<n;j++){
System.out.println("结点V"+i+"至V"+j+"最短路径长度为:"+A[i][j]);
}
}
public static void main(String[] args) {
//构造一个成本邻接矩阵
/* 0 1 2
* ------------------
* 0 | 0 4 11
* 1 | 6 0 2
* 2 | 3 99 0
*
* 99表示无穷大,cost[i][j]:表示结点Vi到结点Vj有一条边,成本为cost[i][j] ;
* 结点到其自身的路径为0;
*/
int[][] cost={
{0,4,11},
{6,0,2},
{3,99,0}
};
findShortestPath(cost,3);
}
}
标签:
原文地址:http://www.cnblogs.com/dan-cnblogs/p/4732996.html