mXn网格

时间:2016-11-14 10:29:44

标签: combinations permutation dynamic-programming

有没有办法找到mXn网格中的路径数量,使用排列向下,向右或对角向下移动一个单元格,从(1,1)开始到达(m,n)?我知道如果运动仅向下和向右,有一个直接的DP解决方案和P& C解决方案(即m + n-2Cn-1)。

2 个答案:

答案 0 :(得分:0)

这只需稍微扩展已经存在的解决方案DP解决方案,该解决方案计算允许仅向下和向右移动的路径。

您需要做的唯一更改是计算在对角线移动时可以达到某个点的方式。

我从http://www.geeksforgeeks.org/count-possible-paths-top-left-bottom-right-nxm-matrix/获取的代码可以帮助您更好地理解它。

// Returns count of possible paths to reach cell at row number m and column
// number n from the topmost leftmost cell (cell at 1, 1)
int numberOfPaths(int m, int n)
{
    // Create a 2D table to store results of subproblems
    int count[m][n];

    // Count of paths to reach any cell in first column is 1
    for (int i = 0; i < m; i++)
        count[i][0] = 1;

    // Count of paths to reach any cell in first column is 1
    for (int j = 0; j < n; j++)
        count[0][j] = 1;

    // Calculate count of paths for other cells in bottom-up manner using
    // the recursive solution
    for (int i = 1; i < m; i++)
    {
        for (int j = 1; j < n; j++)

            //               Rightwards      Downwards     Diagnoally right
            count[i][j] = count[i-1][j] + count[i][j-1] + count[i-1][j-1];

    }
    return count[m-1][n-1];
}

答案 1 :(得分:0)

查找Delannoy个数字。组合解表示为多项式的总和。

t 为对角移动的次数,等式变为:

enter image description here