Java基本程序设计结构
一、要求:
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基本程序设计结构的更多相关文章
- 7.20实习培训日志-Java基础程序设计结构
Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...
- Notes 20180508 : Java基本程序设计结构之关键字与标识符
我们成功书写了HelloWorld后,又深入了解了main函数,提到过main并非是关键字,可什么又是关键字呢?这其实就是这章要研究的内容,本节研究关键字与标识符,在标识符中我们也会讲解一下Java中 ...
- java基本程序设计结构总结
学习一门语言:(1)掌握它的表现形式(2)这些语言什么应用. 1.1关键字 1.关键字是被赋予了特殊含义的单词. 2.关键字特点:关键字所有字母都小写. 3.类名的每一个单词开头必须大写. 1.2标识 ...
- [JAVA学习笔记]JAVA基本程序设计结构
一个简单的Java应用程序 public class FirstSample { public static void main(String[] args) { System.out.println ...
- 201671010142 Java基本程序设计结构学习的感悟
1.在课堂检测过程中发现自己很大的问题,有些是在学习c语言时就遗留下来的问题,比如对于自加自减,强制类型转换的问题,在Java中又多了一个数据类型就是字节型,而且当字节想加就会自动生成int型,必须进 ...
- java核心技术 第3章 java基本程序设计结构
类名规范:以大写字母开头的名词 若由多个单词组成 每个单词的第一个字母应大写(驼峰命名法) 与.java文件名相同 运行程序:java ClassName(dos命令) 打印语句:System.ou ...
- 201771010117马兴德 实验二 Java基本程序设计(1)
实验二 Java基本程序设计(1) 第一部分 理论知识的学习. 第三章Java基本程序设计结构 1 基本知识: (1)标识符:标识符由字母.下划线.美元符号和数字组成,且第一个符号不能为数字 ...
- Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...
- 201771010142 张燕 Java的基本程序设计结构第二周学习总结
第三章 Java的基本程序设计结构 第一部分 理论知识学习部分 一 基本知识: 1.标识符:由字母.下划线,美元符号和数字组成,第一个符号不能为数字,可以用作类名.变量名.方法名.数组名和文件名等. ...
随机推荐
- 【HNOI2014】江南乐
题面 题解 知识引入 - \(SG\)函数 任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个"有向图游戏".下面我们就在有向无环 ...
- [NOI2007]货币兑换 cdq分治,斜率优化
[NOI2007]货币兑换 LG传送门 妥妥的\(n \log n\)cdq做法. 这题用cdq分治也可以\(n \log n\)但是在洛谷上竟然比一些优秀的splay跑得慢真是见了鬼了看来还是人丑常 ...
- JS 四舍五入有小数点
后台传值 先整数化 var a = parseInt(10); var b = parseInt(3); var c = (a / b).toFixed(3)*100; 除之后进行小数点截取后三位再* ...
- [Java] Design Pattern:Code Shape - manage your code shape
[Java] Design Pattern:Code Shape - manage your code shape Code Shape Design Pattern Here I will intr ...
- python数据分析的工具环境
python做数据分析的优势: 拥有大量的库为数据分析和处理提供了完整的工具链 随着库还在不断的增加的同时, 算法的实现也更加的创新.Numpy, matplotlib, scipy,scikit-l ...
- 使用c语言计算分期贷款折算年化收益率(内部收益率IRR*12)
众所周知,现在银行的分期贷款利率是很有诱惑性人.表面看利率是很低的,例如招行的闪电贷有时给我的利率是4.3% 但是,由于贷款是分期还本的,我手上的本金每月都在减少,到最后一个月时手上只有少量本金,但是 ...
- c#简易学生信息管理系统
在近期的学习中,我们学习了泛型及泛型集合的概念和使用,泛型是c#中的一个重要概念,为了巩固我们学习的成果,我们可以使用一个实例来进行练习 题目及要求 要求使用Windows窗体应用程序,制作出如上图的 ...
- C#平均值计算器具体实现
1. 题目及要求 2. Avg.cs 在直接编写窗口程序之前,我们需要创建一个Avg类,我们可以在类库中编辑,也可以像java一样直接在项目中新建类. 有关类库的创建与连接方法,我们在上一次的< ...
- L2-016 愿天下有情人都是失散多年的兄妹
L2-016 愿天下有情人都是失散多年的兄妹 (25 分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你 ...
- Netty源码分析第2章(NioEventLoop)---->第8节: 执行任务队列
Netty源码分析第二章: NioEventLoop 第八节: 执行任务队列 继续回到NioEventLoop的run()方法: protected void run() { for (;;) ...