所以情況是:
1.有N×N個網格,因此它是一個正方形網格
2.將是將內給予
3.每一個細胞步驟的最高金額電網有一定的價值,這將減少最大步數
4.我們只能移動到右側和下方。
5.起點位於網格的左上方,目標位於網格的右下方。
6.我們需要確定的最長路徑(有步驟至少最大量左邊的一個)
7.如果沒有路徑可能的結果將-1算法 - 最長路徑電網益智
所以目前我已經寫了代碼,將在某些情況下工作,但仍不是最佳的。
我現在正在做的是:
1.檢查下一個正確值和下一個低於值。
2.轉到更大的值。
3.如果最大步數變爲0回溯到前一個單元並移動到另一個方向。
4.如果正確的值和低於的值是相同的,我會檢查下一個單元格後的下一個單元格。
看起來問題是第4點。
這是我第4點代碼:
private static int determineBestNext(int[][] grid, int currentX, int currentY) {
int nextRight = 0;
int nextBelow = 0;
int numberOfRows = grid.length - 1;
for(int i=currentX+1;i<numberOfRows-1;i++) {
nextRight += grid[currentY][i+1];
if(currentY != numberOfRows) {
nextRight += grid[currentY+1][i+1];
}
}
for(int i=currentY+1;i<numberOfRows-1;i++) {
nextBelow = grid[i+1][currentX];
if(currentX != numberOfRows) {
nextBelow += grid[i+1][currentX+1];
}
}
if(nextRight > nextBelow) {
return 1;
} else if (nextBelow > nextRight) {
return 2;
} else {
return determineBestNext(grid, currentX+1,currentY+1);
}
}
我想回退是當x比y大在Y步進的數量更大,所以機會正確的價值會比X大反之亦然。
你們有別的想法嗎?謝謝!
謝謝!
我想你有點誤解我的問題,但你的回答讓我想到一個主意。其實我想得到的並不是最短的路徑,而是可能的最昂貴的路徑 – 2014-12-05 01:44:35