所以情况是:
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