1265马拦过河卒

#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;
}
                                      //一开始也没啥思路,后来参考了大神们的想法,原来真的有方法,只是你想不到罢了,学习永无止境,原看到次博客的人越努力,越幸运
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值