-1

大小爲m X n的二維數組。試想一隻貓在第一槽(0,0)。數組中的元素表示該時隙可能的最長跳轉。例如:當前插槽包含3個,貓可以水平或垂直跳轉到第3個插槽/第2個插槽/第1個插槽。貓不能對角跳。貓不能在包含0的槽上着陸。從'0槽'貓不能移動到任何地方。我必須編寫一個Java程序來查找從(0,0)到(m-1,n-1)的最小可能跳轉。在二維陣列中從(0,0)到達(m-1,n-1)所需的最小可能跳數

我應該使用哪種數據結構? 我猜想一個數據結構,它可以存儲多個路徑,節點之間的節點在起始&之間,如圖。 我應該遵循什麼算法? 我想根據這個問題修改像dijkstra的shouls這樣的最短路徑算法。

+2

可能的重複[兩點之間網格中的最短路徑。隨着捕捉](http://stackoverflow.com/questions/14158304/shortest-path-in-a-grid-between-two-points-with-a-catch) – GargantuChet

+0

也許動態編程,回溯 – keyser

回答

0

從我的問題中,您只能水平或垂直移動。

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

,因爲它不能斜走,最短路徑是兩種路徑。不管怎樣,從(1,3)到(2,5)你最終都會下降到1或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,你可以將其設置爲四捨五入,如果有小數,這將確保您始終獲得對角線跳躍的正確數量。

這會帶你走得儘可能的對角線,然後只需完成任何你可以做的事(即水平或垂直)的跳躍。

+0

我們不能跳斜。我已經更清楚地寫下了這個問題。請再讀一遍,幫助我。 –