解题思路
首先将偶数行和列设置为障碍,将之无法访问,然后就是用DFS来测试所有的路线,输出所有的路线。
#include <stdio.h>
int n, m;
int count = 0;
int a[31][31]; //0表示为访问, 1表示访问, 2表示障碍
int xx[2] = {1, 0}; // 表示移动方向 右 下
int yy[2] = {0, 1};
void init() { // 将偶数行和列设置为障碍, 将之无法访问
int i, j;
a[1][1] = 1;
for(i = 1; i <= 30; i++) {
for(j = 1; j <= 30; j++) {
if(i % 2 == 0 && j % 2 == 0) {
a[i][j] = 2;
}
}
}
return;
}
void dfs(int x, int y) {
int i;
if(x == n && y == m) {
count++;
}
for(i = 0; i < 2; i++) {
int tx = x + xx[i];
int ty = y + yy[i];
// 判定边界条件
if(tx > n || ty > m || tx < 1 || ty < 1 || a[tx][ty] != 0)
continue;
a[tx][ty] = 1;
dfs(tx, ty);
a[tx][ty] = 0;
}
return;
}
main() {
scanf("%d%d", &n, &m);
init();
dfs(1, 1); // 从1行1列开始
printf("%d", count);
return 0;
}