#include 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; }