动态规划解最短路径问题

1. 算法思想

      动态规划的实质是分治思想和解决冗余,因此,动态规划是一种将问题实例分解为更小的、相似的子问题,并存储子问题的解而避免计算重复的子问题,以解决最优化问题的算法策略。

2. 问题描述

已知图G(V,E)的距离矩阵如下,求其任意两点间的最短距离。-1表示两点之间不可达。

-1,1,2,-1,-1,-1

-1,-1,1,3,-1,7

-1,-1,-1,1,2,-1

-1,-1,-1,-1,-1,3

-1,-1,-1,-1,-1,6

-1,-1,-1,-1,-1,-1

3. 程序清单

 

/**图中任意两点间的最短距离问题

 * DynamicProgramming.java

 */

package DynamicProgramming;

public class DynamicProgramming {

    public void AllPaths(int matrix[][]){

   int A[][]= new int[matrix.length][matrix.length];

   int n=matrix.length;

   for(int i=0;i<n;i++)

       for(int j=0;j<n;j++)

           A[i][j]=matrix[i][j];    //matrix[i][j]复制到A[i][j]

   

    for(int k=0;k<n;k++)  //对最高下标为k的结点的路径

    for(int i=0;i<n;i++) //对于所有可能的结点对

        for(int j=0;j<n;j++)

    //if(A[i][j]!=-1 && A[i][k]!=-1 && A[k][j]!=-1)

        if(A[i][k]!=-1 && A[k][j]!=-1)

        { if(A[i][j]!=-1)

            A[i][j] = min(A[i][j],A[i][k]+A[k][j]);

        else

            A[i][j] = A[i][k]+A[k][j];

        }

   

       //输出任意两点间的最短距离

  System.out.println("任意两点间的最短距离的矩阵表示为");

  for(int i=0;i<n;i++){

    for(int j=0;j<n;j++)

    System.out.print(A[i][j]+" ");

    System.out.println();

  }   

    }

    public int min(int a,int b){

       int result;

       result = a;

       if(b<a)

           result = b;

       return result;

    }

    public static void main(String[] args){

        int cost[][] ={{-1,1,2,-1,-1,-1},{-1,-1,1,3,-1,7},{-1,-1,-1,1,2,-1},   {-1,-1,-1,-1,-1,3},{-1,-1,-1,-1,-1,6},{-1,-1,-1,-1,-1,-1}}; //定义二维数组,-1表示不可到达

        DynamicProgramming instance = new DynamicProgramming();

        instance.AllPaths(cost);

    }

}

运行结果:

从结点1到结点3的最短距离是:15
从结点1到结点2的最短距离是:19
从结点1到结点6的最短距离是:25
从结点1到结点5的最短距离是:29
从结点1到结点4的最短距离是:29

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值