动态规划。
dp[[i][j][n]表示从(x,y)出发走n步到达(i,j)位置的路径数。
class Solution {
public:
int findPaths(int m, int n, int N, int I, int J) {
if (N == 0) {
return 0;
}
typedef long long LL;
const LL mod = 1000000007;
vector<vector<vector<LL>>> dp(m, vector<vector<LL>>(n, vector<LL>(N, 0)));
dp[I][J][0] = 1;
const int mv[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
LL ans = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < m; ++j) {
for (int k = 0; k < n; ++k) {
for (int l = 0; l < 4; ++l) {
int nx = j + mv[l][0];
int ny = k + mv[l][1];
if (nx < 0 || nx ==m || ny < 0 || ny == n || i - 1 < 0) {
continue;
}
dp[j][k][i] += dp[nx][ny][i-1];
dp[j][k][i] %= mod;
}
if (j == 0) {
ans += dp[j][k][i];
ans %= mod;
}
if (j == m - 1) {
ans += dp[j][k][i];
ans %= mod;
}
if (k == 0) {
ans += dp[j][k][i];
ans %= mod;
}
if (k == n - 1) {
ans += dp[j][k][i];
ans %= mod;
}
}
}
}
return static_cast<int>(ans);
}
};