一、要求:

1、设平面上有一个m×n 的网格,将左下角的网格点标记为(0,0)而右上角的网格点标记为(m,n)。某人想从(0,0)出发沿网格线行进到达(m,n),但是在网格点(i,j)处他只能向上行进或者向右行进,向上行进的代价为aij(amj =+∞),向右行进的代价是bij(bin =+∞)。试设计一个动态规划算法,在这个网格中为该旅行者寻找一条代价最小的旅行线。

二、先不说别的,上代码

/**
 *
 *
 * 2016.09.08
 */
import java.util.*; 
import static java.lang.Math.*; 
  public class  Shiyaner
 {
 
 public static void main(String[] args)
  
 { 
 final  int m = 5;
 final  int n = 5;
 
     //  定义向上,向右的代价,以及最优代价
 
     int[][] Cost = new int[m+1][n+1];
 
     int[][] Down = new int[m][n+1];
 
     int[][] Right = new int[m+1][n];
 
     int count = 0, i = 0, j = 0; 
 //  随机的产生向上代价数组Above,并输出
 
 for(i = 0; i < m; i++)
 for(j = 0; j < n+1; j++)
 
     { 
 
         Random rand = new Random(); 
 
     Down[i][j] = (rand.nextInt(5)+5); 
 
 
     } 
 
     System.out.printf("Down:\n");
 
     for(i = 0; i < m; i++)
 
     {
 
     
 for(j = 0; j < n+1; j++)
 { 
  
  System.out.printf("%5d", Down[i][j]);  
  }  
          System.out.println("\n"); 
 
     } 
 
    //  随机的产生向右代价数组Right,并输出
    for(i = 0; i < m+1; i++) 
   for(j = 0; j < n; j++)

{  
  Random rand = new Random();  
       Right[i][j] = (rand.nextInt(5)+5); 
       }  
       System.out.printf("Right:\n"); 
       for(i = 0; i < m+1; i++) 
       { 
   for(j = 0; j < n; j++) 
   { 
    System.out.printf("%5d", Right[i][j]);

}  
    System.out.println("\n"); 
 
     } 
       //   求出最优代价数组Cost并输出
       Cost[0][0] = 0; 
 
     for(i = 1; i < m+1; i++) 
   Cost[i][0] = Cost[i-1][0] + Down[i-1][0];
 
     for(j = 1; j < n+1; j++)  
   
 Cost[0][j] = Cost[0][j-1] + Right[0][j-1];

for(i = 0; i < m; i++) 
   for(j = 0; j < n; j++) 
   Cost[i+1][j+1] = min((Cost[i+1][j] + Right[i+1][j]), (Cost[i][j+1] + 
 Down[i][j+1]));  
       System.out.printf("最优距离:\n");
 
     for(i = 0; i < m+1; i++)
 
     { 
    
 for(j = 0; j < n+1; j++) 
   {
 
  System.out.printf("%5d",Cost[i][j]);


 
         System.out.println("\n"); 
 
     }
 
 
     //  输出最优路径的具体走法
  
 
     System.out.println("请输入你想到达的坐标位置:");
 
     Scanner in1 = new Scanner(System.in);

System.out.print("横坐标:");
 
     int a = in1.nextInt();
 
     System.out.print("纵坐标:");
 
     int b = in1.nextInt();
 
     int[] d = new int[a+b];
 
     int k = a+b-1; 
 
      i = a - 1  ;
 
      j = b - 1  ;
 
     while ( i != 0 && j != 0 )

{
 
      if (  Cost[i+1][j+1] == (Cost[i+1][j] + Right[i+1][j]))
 
      {
 
     
  d[k] = 0;
 
     
  j--;
 
     
  k--;
 }
  else

{
  
  d[k] = 1;

i--;

k--;
 
     
  } 
 
     } 
 
     if( i == 0 )
 
     {
 
     
 while ( j != 0 )

{
 
 d[k] = 1;

j--;

k--;

}


 
     if( j == 0 )
 
     {
 
      
 while ( i != 0 )
 {
 
     
 
 d[k] = 0;

i--;
 
     
 
 k--; 
  } 
 
     } 
 
     for (i = a+b-1 ; i >= 0 ; i-- )
 
     
 {
 
 if ( d[i] == 0 )

System.out.println("Right");
 
     
 else
 
 System.out.println("Down");
  
 } 
 
 } 
 } 
 
  运行结果如下:

Down:
    5    9    7    6    5    6

8    9    8    5    7    6

9    6    7    9    6    5

9    9    7    5    6    6

5    7    5    9    5    5

Right:
    7    7    9    8    8

6    6    5    6    6

8    9    7    9    8

9    7    7    5    8

6    7    7    9    7

6    7    8    5    6

最优距离:
    0    7   14   23   31   39

5   11   17   22   28   34

13   20   25   27   35   40

22   26   32   36   41   45

31   35   39   41   47   51

36   42   44   50   52   56

请输入你想到达的坐标位置:
横坐标:3
纵坐标:3
Down
Down
Down
Down
Right
Right

Java基本程序设计结构的更多相关文章

  1. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  2. Notes 20180508 : Java基本程序设计结构之关键字与标识符

    我们成功书写了HelloWorld后,又深入了解了main函数,提到过main并非是关键字,可什么又是关键字呢?这其实就是这章要研究的内容,本节研究关键字与标识符,在标识符中我们也会讲解一下Java中 ...

  3. java基本程序设计结构总结

    学习一门语言:(1)掌握它的表现形式(2)这些语言什么应用. 1.1关键字 1.关键字是被赋予了特殊含义的单词. 2.关键字特点:关键字所有字母都小写. 3.类名的每一个单词开头必须大写. 1.2标识 ...

  4. [JAVA学习笔记]JAVA基本程序设计结构

    一个简单的Java应用程序 public class FirstSample { public static void main(String[] args) { System.out.println ...

  5. 201671010142 Java基本程序设计结构学习的感悟

    1.在课堂检测过程中发现自己很大的问题,有些是在学习c语言时就遗留下来的问题,比如对于自加自减,强制类型转换的问题,在Java中又多了一个数据类型就是字节型,而且当字节想加就会自动生成int型,必须进 ...

  6. java核心技术 第3章 java基本程序设计结构

    类名规范:以大写字母开头的名词 若由多个单词组成 每个单词的第一个字母应大写(驼峰命名法)  与.java文件名相同 运行程序:java ClassName(dos命令) 打印语句:System.ou ...

  7. 201771010117马兴德 实验二 Java基本程序设计(1)

    实验二 Java基本程序设计(1)  第一部分    理论知识的学习. 第三章Java基本程序设计结构 1  基本知识: (1)标识符:标识符由字母.下划线.美元符号和数字组成,且第一个符号不能为数字 ...

  8. Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记

    第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...

  9. 201771010142 张燕 Java的基本程序设计结构第二周学习总结

    第三章 Java的基本程序设计结构 第一部分 理论知识学习部分 一 基本知识: 1.标识符:由字母.下划线,美元符号和数字组成,第一个符号不能为数字,可以用作类名.变量名.方法名.数组名和文件名等. ...

随机推荐

  1. Android JS interaction

    WebView web; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst ...

  2. 10 腾讯云、django2.0、uwsgi、mysql、nginx 部署

    1.腾讯云 操作系统 Ubuntu Server 16.04.1 LTS 64位 获取root权限 ubuntu@VM---ubuntu:~$ sudo passwd root Enter new U ...

  3. BZOJ2439【中山市选2011】序列

    题面 题解 设$f[i]$表示将$[1,i]$修改为递增的最小代价, $g[i]$表示将$[i,n]$修改为递减的最小代价. $L[i]$表示将$[1,i]$修改为倒$\text V$的代价 $$ \ ...

  4. Gitlab+Jenkins学习之路(十一)之Jenkins自动触发构建和发布

    思路图: 一.下载gitlab plugin jenkins-->系统管理-->管理插件-->下载并安装gitlab plugin 二.配置gitlab认证 路径:Jenkins-- ...

  5. Execute Process Task

    Execute Process Task 用于在Control Flow中执行应用程序,常用于对加密的数据进行解压. 1,RequireFullFileName 属性:是否需要完整的文件路径,如果在F ...

  6. Java动态代理:一个面包店的动态代理帝国

    文章首发于[博客园-陈树义],点击跳转到原文大白话说Java动态代理:一个面包店的动态代理帝国 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中, ...

  7. bootstrap学习笔记(5)

    Bootstrap输入框组 主要记住一个原则 创建输入框的步骤 把前缀或后缀元素放在一个带有 class .input-group 的 <div> 中. 接着,在相同的 <div&g ...

  8. 【转】将Centos的yum源更换为国内的阿里云源

    摘要: 阿里云是最近新出的一个镜像源.得益于阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源. 阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/ CentOS ...

  9. 使用proxyee-down解决百度云下载限速问题

    1.在下面页面安装HTTP下载器 https://github.com/proxyee-down-org/proxyee-down#%E4%B8%8B%E8%BD%BD 2.安装switchy插件 h ...

  10. 高可用注册中心 ->Spring Cloud Eureka

    在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况, 所以在生产 环境中必须对各个组件进行高可用部署, 对于微服务如此, 对于服务注册中心也一样. 但 是到本节为止,我们一直都在使用单节点 ...