#include <iostream>
#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
#define max 16
int dx[9]={0,1,1,2,2,-1,-1,-2,-2}; //马走日,,,丫丫丫!!!
int dy[9]={0,2,-2,1,-1,2,-2,1,-1}; //运用数组动态定义马所控制的点,高明高明,get到了!!!
int f[max][max]={0},n,m,x,y,sum=0; //运用二维数组
void mark()
{
for(int i=0;i<9;i++)
{
if(x+dx[i]>=0&&x+dx[i]<=15&&y+dx[i]>=0&&y+dy[i]<=15)
f[x+dx[i]][y+dy[i]]=1; //标记马所控制的点
}
}
void solve(int a,int b)
{
if(a ==n &&b == m) //到达目的地
sum++;
else
{
if(a+1<=n&&b<=m&&f[a+1][b]!=1) //不经过马所控制的点,且在题目要求范围内,进行该步
solve(a+1,b);
if(a<=n&&b+1<=m&&f[a][b+1]!=1) //不经过马所控制的点,且在题目要求范围内,进行该步
solve(a,b+1);
}
}
int main()
{
cin>>n>>m>>x>>y;
mark();
solve(0,0); //从00开始走,函数为循环函数
cout<<sum<<endl;
return 0;
}
//一开始也没啥思路,后来参考了大神们的想法,原来真的有方法,只是你想不到罢了,学习永无止境,原看到次博客的人越努力,越幸运
1265马拦过河卒
最新推荐文章于 2020-11-01 09:02:11 发布