【问题标题】:Dynamic programming - Getting number of paths in grid from starting point to end point动态编程 - 获取网格中从起点到终点的路径数
【发布时间】:2016-07-31 16:11:29
【问题描述】:

我有一个矩阵,一个起点和一个终点,我想计算一个矩阵,其中每个 matrix[i][j] 表示从起点到终点经过 (i, j) 位置。

我的解决方案正确计算了从起点到终点的路径总数(存储在 matrix[startx][starty] 或 matrix[endx][endy] 中的值),但并非所有其他值都是正确的。

你有什么建议?

我的代码如下:

private static long solve() {
    board[startx][starty] = 1; 

    for (int i = endx; i <= startx; i++) { 
        for (int j = endy; j >= starty; j--) { 
                if (i > 0 && j < board[i].length - 1)
                    board[i][j] += board[i - 1][j] + board[i][j + 1];
                else if (i > 0)
                    board[i][j] += board[i - 1][j];
                else if (j < tablero[i].length - 1)
                    board[i][j] += board[i][j + 1];
        }
    }


    for(int j = starty + 1; j < endy; j++) {
            board[endx][j] = board[endx + 1][j] + 
                                  board[endx][j - 1];
    }

    for(int i = endx + 1; i < startx; i++) {
            board[i][endy] = board[i + 1][endy] + 
                board[i][endy - 1]);
    }

    board[endx][endy] = board[endx][endy - 1] + 
                                    board[endx + 1][endy]);


    return board[startx][starty];
}

谢谢。

【问题讨论】:

  • 可以接受哪些路径?简单的?单调(仅向右和向下)?不要犹豫,提供重要的细节。
  • 唯一可接受的路径是顶部和右侧

标签: java algorithm matrix dynamic-programming


【解决方案1】:

你不要从这样的事情开始:

[[0,0,0,0,0,0]
,[0,0,1,0,0,0]
,[0,0,1,0,0,0]
,[0,0,1,1,1,0]
,[0,0,0,0,0,0]
,[0,0,0,0,0,0]]

然后M[i][j] = M[i-1][j] + M[i][j-1] ?

[[0,0,0,0,0,0]
,[0,0,1,3,6,0]
,[0,0,1,2,3,0]
,[0,0,1,1,1,0]
,[0,0,0,0,0,0]
,[0,0,0,0,0,0]]

【讨论】:

  • 是的,起初这是我的解决方案,但我只在 (startx, starty) 中放置了 1,但后来看起来我有点困惑。谢谢!
猜你喜欢
  • 2015-02-19
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 2012-12-03
  • 2019-12-30
  • 2013-09-12
相关资源
最近更新 更多