在2D阵列中从(0,0)到达(m-1,n-1)所需的最小跳跃

时间:2014-12-18 17:28:43

标签: java multidimensional-array graph-algorithm dijkstra shortest-path

尺寸为m X n的二维数组。想象一下第一个插槽中的猫(0,0)。阵列的元素表示从该槽开始的最长跳跃。例如:当前插槽包含3个,猫可以水平或垂直跳到第3个插槽/第2个插槽/第1个插槽。猫不能对角跳。猫不能落在包含0的槽上。从'0槽'开始,猫不能移动到任何地方。我必须编写一个java程序来找到从(0,0)到(m-1,n-1)的最小可能跳转。

我应该使用哪种数据结构?                我想一个数据结构,可以存储多个路径与节点之间的起始&结束节点,如图。 我应该遵循什么算法?                我想根据这个问题修改像dijkstra的shouls这样的最短路径算法。

1 个答案:

答案 0 :(得分:0)

根据我的问题,您只能水平或垂直移动。

"the current slot contains 3, the cat can jump to the 3rd slot, horizontally or vertically.

由于它不能沿对角线移动,因此最短路径是任一路径。无论如何,从(1,3)到达(2,5),你仍然最终会下降到2和2,订单并不重要。

如果你可以对角移动,你试过使用毕达哥拉斯定理吗? a^2 + b^2 = c^2

//A = amount of vertical jumps, B = amount of horizonal jumps, C = the distance in-between.
//Prior to this, you'd have to know the point you are going to.

从那里,取c^2的平方根并删除小数部分。

即。 Math.sqrt(2) = 1.414 //just keep the 1

要保持1,如果有小数,可以将其设置为向下舍入,这样可以确保始终获得正确的对角线跳跃次数。

这会让你尽可能地沿着对角线前进,然后用你能做的任何事情(即水平或垂直)完成跳跃。