中过象棋棋盘一半 马踏日 从(1,1)出发只能向右踏出,到(m,n)有多少路径

# include
# include
# define M 9
# define N 5
int a[10]={1},b[10]={1},sum=0,m,p;//a[]存储横坐标,b[]存储纵坐标
int check(int n){

	if((a[n]-a[n-1]==1&&abs(b[n]-b[n-1])==2)||(a[n]-a[n-1]==2&&abs(b[n]-b[n-1])==1)){
		return 1;}//合法
else return 0;//不合法
}
void put(int n){
int i,j;
for(i=1;i<=M;i++){
	for(j=1;j<=N;j++){
		a[n]=i;
		b[n]=j;
		if(check(n)){
	    if(a[n]==m&&b[n]==p) sum++;
		else put(n+1);
}
}
}
}
int main(){
	scanf("%d%d",&m,&p);
put(1);
printf("%d\n",sum);
}

你可能感兴趣的:(中过象棋棋盘一半 马踏日 从(1,1)出发只能向右踏出,到(m,n)有多少路径)