假设二维坐标内,左下角的第一个格子是(1,1),把棋盘的右上角看做二维坐标(M,N),用 f(m,n,i,j,s)表示小球初始坐标在(i,j),在步长s内,走出m*n的格子的走法总数,f(i,j)=f(m, n, i ,j - 1, s - 1) + f(m, n, i-1, j, s - 1) +f(m, n, i + 1, j, s - 1) + f(m, n, i, j + 1, s - 1)。
* 递归求解
* @return
*/
private static int process(int m, int n, int i, int j, int s) {
if (i < 1 && s >= 0) {
return 1;
}
if (j < 1 && s >= 0) {
return 1;
}
if (i > m && s >= 0) {
return 1;
}
if (j > n && s >= 0) {
return 1;
}
if (s == 0) {
return 0;
}
return process(m, n, i ,j - 1, s - 1) + process(m, n, i-1, j, s - 1) +
process(m, n, i + 1, j, s - 1) + process(m, n, i, j + 1, s - 1);
}
网友评论