Files
python/TangDou/LanQiaoBei/LanQiaoBei13GuoSai/6_1.cpp

45 lines
1.4 KiB
C++
Raw Normal View History

2025-08-30 18:35:01 +08:00
#include <iostream>
using namespace std;
int dfs(int i, int j, int visited[][10], int cnt, int m, int n) {
// 终止条件:当遍历到最后一个格子时,如果已经遍历了mn个格子,则符合条件,数量加1
if (i == m && j == n) {
if (cnt == m * n)
return 1;
else
return 0;
}
// 非终止条件,继续递归
int res = 0;
if (i > 1 and !visited[i - 2][j - 1]) {
visited[i - 2][j - 1] = 1;
res += dfs(i - 1, j, visited, cnt + 1, m, n);
visited[i - 2][j - 1] = 0;
}
if (j > 1 and !visited[i - 1][j - 2]) {
visited[i - 1][j - 2] = 1;
res += dfs(i, j - 1, visited, cnt + 1, m, n);
visited[i - 1][j - 2] = 0;
}
if (i < m and !visited[i][j - 1]) {
visited[i][j - 1] = 1;
res += dfs(i + 1, j, visited, cnt + 1, m, n);
visited[i][j - 1] = 0;
}
if (j < n and !visited[i - 1][j]) {
visited[i - 1][j] = 1;
res += dfs(i, j + 1, visited, cnt + 1, m, n);
visited[i - 1][j] = 0;
}
return res;
}
int main() {
int m, n;
cin >> m >> n;
int visited[m][10] = {0}; // 二维数组表示已经遍历的格子
visited[0][0] = 1;
int cnt = 1; // 已经遍历的格子数目
cout << dfs(1, 1, visited, cnt, m, n) << endl;
return 0;
}