走方格
问题描述
在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列数都是偶数,不能走入这一格中。问有多少种方案。
输入格式
输入一行包含两个整数 n, m。
输出格式
输出一个整数,表示答案。
样例输入
3 4
样例输出
2
样例输入
6 6
样例输出
0
测试数据
对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。
思路:dfs,dfs属于蓝桥杯常考知识点!!!
code:
#include<stdio.h>
#include<string.h>
#define INF 99
int ans=0;
int dir[2][2]={
{
0,1},{
1,0}};
int M[INF][INF];
int n,m;
void dfs(int x,int y){
if(x<1||y<1||x>m||y>n){
return ;
}
if(x==m&&y==n){
ans++;
}
for(int i=0;i<2;i++){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(xx%2==0&&yy%2==0){
continue;
}
M[xx][yy]=1;
dfs(xx,yy);
M[xx][yy]=0;
}
}
int main(){
scanf("%d %d",&n,&m);
memset(M,0,sizeof M);
dfs(1,1);
printf("%d",ans);
return 0;
}