为了大家看着方便,我顺便翻译一下^-^此题翻译过来(再加以简化)是这样的: 已知:一个二维数组有M行N列。
求解:一条路经
条件:1.它是由数组内各个连续的单元连接而成,所谓连续是指两个单元在同一行或同一列,且中间没有其他单元(说白了就是两个单元挨着:P)
2.这条路径内各单元数值之和是包含在全部单元中的。(这句话我估计翻译的不太对,把原句也贴上,可以讨论一下,原句是The cost of a path is the summary of all the cells´ costs involved.) ★请做出一条各个单元内数值相加之和最小的路径★ 要求:1.描述此模块用到了哪些API
2.画出UML图(这个我想应该是流程图吧)
3.用java或者C++写出此模块
4.写出你的解题思路 题目给定函数如下(共三部分Map,Cell和Trace):
(Map)
M: int
N: int
getCell(int row, int col): Cell
getStartCell(): Cell
getTargetCell(): Cell
解释如下:
M: 行数
N: 列数
getCell 返回指定单元的行列数.index从0开始
getStartCell和GetTargetCell返回开始的单元和结束的单元 (Cell)
row: int
col: int
getCost(): int (Trace)
getTraceLength(): int
getCell(int n): Cell
getCost(): int
解释如下:
getTraceLength返回这条路径一共包括多少个单元
getCell返回这条路径所经过的第n个单元
getCost返回这条路径中所有单元中数值的和
求解:一条路经
条件:1.它是由数组内各个连续的单元连接而成,所谓连续是指两个单元在同一行或同一列,且中间没有其他单元(说白了就是两个单元挨着:P)
2.这条路径内各单元数值之和是包含在全部单元中的。(这句话我估计翻译的不太对,把原句也贴上,可以讨论一下,原句是The cost of a path is the summary of all the cells´ costs involved.) ★请做出一条各个单元内数值相加之和最小的路径★ 要求:1.描述此模块用到了哪些API
2.画出UML图(这个我想应该是流程图吧)
3.用java或者C++写出此模块
4.写出你的解题思路 题目给定函数如下(共三部分Map,Cell和Trace):
(Map)
M: int
N: int
getCell(int row, int col): Cell
getStartCell(): Cell
getTargetCell(): Cell
解释如下:
M: 行数
N: 列数
getCell 返回指定单元的行列数.index从0开始
getStartCell和GetTargetCell返回开始的单元和结束的单元 (Cell)
row: int
col: int
getCost(): int (Trace)
getTraceLength(): int
getCell(int n): Cell
getCost(): int
解释如下:
getTraceLength返回这条路径一共包括多少个单元
getCell返回这条路径所经过的第n个单元
getCost返回这条路径中所有单元中数值的和
解决方案 »
- 【新手学java】自定义包的问题
- 用java遍历修改xml文件?问2
- 滥用AJAX的年代
- 各位大侠,如何实现gui中的一个计时器呀?
- 有人玩过 IL2 遗忘的战争 吗?它没有给系统装jvm,但是在自己的游戏目录里面有jvm.dll,java.exe等等,怎么做到这样的打包呢??随便问一
- 怎么在inner class中使用外部类的引用,在线等,急
- 哪位大哥用过JET1.0,请告诉小弟那里有下载!!!
- 兄弟们给一个JAVA树型结构比较优化的算法吧
- Java-Applet用Socket(TCP)与C语言写的服务程序传输数据,有何种好方法?
- 好丢人啊。。。学JAVA2个星期还没有入门
- 高手指点,调用win API出错???
- 一个很简单的问题
算法里面有一个好像迪杰特斯拉算法专门解决这种问题的,在数据结构图的一章找找看。做起来太麻烦了,自己努力一下吧。(要不是在加班还可能试试:)
http://ress.wtusm.edu.cn/garden/courseware/gis/ch5/5.7.2.htm#最短路径分析
public int Dijkstra(int[][] G,int n,int s,int t,int path[])
{
int i,j,w,minc, d[], [];
d = new int[n];
= new int[n];
for (i=0; i<n; i++) [i]=0; for (i=0; i<n; i++)
{
d[i]=G[s][i];
path[i]=s;
} [s]=1;
path[s]=0;
d[s]=0; for(i=1; i<n; i++)
{
minc = infinity;
w = 0;
for( j = 0; j < n; j++ )
if( ( [j]==0 ) && ( minc >= d[j] ) )
{
minc=d[j];w=j;
}
[w]=1;
for(j=0; j<n; j++)
if( ([j]==0) && ( G[w][j] != infinity ) && ( d[j] > d[w]+G[w][j] ) )
{
d[j]=d[w]+G[w][j];
path[j]=w;
}
}
return d[t];
}path里面存放的是最短路径.
一般情况下,应该是这样使用得到的path数组的:
假设源点是1.目标点是3.共有6个点.
则path有6个元素,从path[1]到path[6].
取path[3].得到4,则说明要从1走到4再走到3,最短
那么,从1走到4又怎么走最短呢?就是取path[4]了.
这是一个递归的过程.
没用递归,用FOR嵌套