zoukankan      html  css  js  c++  java
  • 利用DP求解最短路径

    可套用Assembly Lines问题解法

    附上源代码JAVA版

     1 package second;
     2 public class SP {
     3     static int x=100000;//两点之间没路,路径长度设为无穷大
     4     static int max=100000;
     5     int data[][]=new int[10][10];//边的全值
     6     static int[]dist=new int[10];//记录最短路径的值
     7     static int path[]=new int[10];//记录最短路径
     8     public static void fpath(int a[][])//求最短路径的值
     9     {
    10          int i,j,k;
    11          dist[0]=0;
    12          for(i=1;i<10;i++)
    13          {
    14              k=max;
    15              for(j=0;j<i;j++)
    16              {
    17                  if(a[j][i]!=x)
    18                      if((dist[j]+a[j][i])<k)
    19                          k=dist[j]+a[j][i];    //dist[1]+a[1,4]=4+10=14
    20              }                                 //dist[2]+a[2,4]=2+6=8 8<14 dist[4]=8 到节点4的最短路径
    21              dist[i]=k;
    22          }
    23     }
    24     static int froute(int a[][])//求最短路径
    25      {
    26          int j,b,k=1,i=9;
    27          path[0]=10;
    28          while(i>0)
    29          {
    30              for(j=i-1;j>=0;j--)
    31              {
    32                  if(a[j][i]!=x)
    33                  {
    34                      b=dist[i]-a[j][i];//
    35                     if(b==dist[j])//如果b的值等于到j的最短路径
    36                      {
    37                          path[k++]=j+1;//数组从0开始,j+1与图中圈里的标号对应path[k]=j+1这个点,然后k++
    38                          i=j;
    39                          40                      }
    41                  }
    42      
    43              }
    44          }
    45              return k;
    46      }
    47     
    48     public static void main(String[] args) 
    49     {
    50         int i,m;
    51         int[][] A ={
    52                    {x,4,2,3,x,x,x,x,x,x},//A[j][i]表示点j到点i的代价
    53                    {x,x,x,x,10,9,x,x,x,x},
    54                    {x,x,x,x,6,7,10,x,x,x},
    55                    {x,x,x,x,x,3,8,x,x,x},
    56                    {x,x,x,x,x,x,x,4,8,x},
    57                    {x,x,x,x,x,x,x,9,6,x},
    58                    {x,x,x,x,x,x,x,5,4,x},
    59                    {x,x,x,x,x,x,x,x,x,8},
    60                    {x,x,x,x,x,x,x,x,x,4},
    61                    {x,x,x,x,x,x,x,x,x,x},};
    62         fpath(A);
    63         System.out.print(dist[9]);
    64         System.out.println("");
    65         m=froute(A);
    66         for(i=m-1;i>0;i--)
    67             System.out.print(path[i]+"->");
    68         System.out.print(path[0]);
    69         
    70     }
    71 
    72 
    73 }

     问题

    1.public static void main(String[] args)主函数格式改了直接就没法run;

    2.给定义数组规定每行每列有多少int data[][]=new int[10][10];

    3.静态数组定义方式:static int[]dist=new int[10];

    4.NullPointerException数组长度未初始化;

    参考:http://www.cnblogs.com/lpshou/archive/2012/04/17/2453370.html

  • 相关阅读:
    进程详解
    java 实体对象与Map之间的转换工具类(自己还没看)
    fastjson中toString与toJSONString的差别
    JSONObject.toJSONString()包含或排除指定的属性
    FastJson中JSONObject用法及常用方法总结
    SpringBoot之ApplicationRunner接口和@Order注解
    shiro使用
    RedisTemplate 中 opsForHash()使用 (没有测试过,copy的)
    解决:javax.servlet.ServletException: Circular view path []: would dispatch back to the current....
    【Springboot】spring-boot-starter-redis包报错 :unknown
  • 原文地址:https://www.cnblogs.com/Ljj-Nancy/p/5396145.html
Copyright © 2011-2022 走看看