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