尺寸为m X n的二维数组。想象一下第一个插槽中的猫(0,0)。阵列的元素表示从该槽开始的最长跳跃。例如:当前插槽包含3个,猫可以水平或垂直跳到第3个插槽/第2个插槽/第1个插槽。猫不能对角跳。猫不能落在包含0的槽上。从'0槽'开始,猫不能移动到任何地方。我必须编写一个java程序来找到从(0,0)到(m-1,n-1)的最小可能跳转。
我应该使用哪种数据结构? 我想一个数据结构,可以存储多个路径与节点之间的起始&结束节点,如图。 我应该遵循什么算法? 我想根据这个问题修改像dijkstra的shouls这样的最短路径算法。
答案 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,如果有小数,可以将其设置为向下舍入,这样可以确保始终获得正确的对角线跳跃次数。
这会让你尽可能地沿着对角线前进,然后用你能做的任何事情(即水平或垂直)完成跳跃。