跳马 蓝桥杯

 

直接暴力递归 真香 遍历可以走的八个方向,且用搜索算法,套用的数组记录的方式+回溯+剪枝,朴实无华。

#include<iostream>
using namespace std;
int arr[9][9],flag=1000000007;
void func(int a,int b,int c,int d,int num){
    if(num>=flag){return;}
    if(a==c&&b==d){
        flag=num<flag ? num:flag;
    }
    if(a+1<=8&&b+2<=8&&a+1>=0&&b+2>=0&&arr[a+1][b+2]==0){
        arr[a+1][b+2]=1;
        func(a+1,b+2,c,d,num+1);
        arr[a+1][b+2]=0;
    }
    if(a+2<=8&&b+1<=8&&a+2>=0&&b+1>=0&&arr[a+2][b+1]==0){
        arr[a+2][b+1]=1;
        func(a+2,b+1,c,d,num+1);
        arr[a+2][b+1]=0;
    }
    if(a+2<=8&&b-1<=8&&a+2>=0&&b-1>=0&&arr[a+2][b-1]==0){
        arr[a+2][b-1]=1;
        func(a+2,b-1,c,d,num+1);
        arr[a+2][b-1]=0;
    }
    if(a+1<=8&&b-2<=8&&a+1>=0&&b-2>=0&&arr[a+1][b-2]==0){
        arr[a+1][b-2]=1;
        func(a+1,b-2,c,d,num+1);
        arr[a+1][b-2]=0;
    }
    if(a-1<=8&&b-2<=8&&a-1>=0&&b-2>=0&&arr[a-1][b-2]==0){
        arr[a-1][b-2]=1;
        func(a-1,b-2,c,d,num+1);
        arr[a-1][b-2]=0;
    }
    if(a-2<=8&&b-1<=8&&a-2>=0&&b-1>=0&&arr[a-2][b-1]==0){
        arr[a-2][b-1]=1;
        func(a-2,b-1,c,d,num+1);
        arr[a-2][b-1]=0;
    }
    if(a-2<=8&&b+1<=8&&a-2>=0&&b+1>=0&&arr[a-2][b+1]==0){
        arr[a-2][b+1]=1;
        func(a-2,b+1,c,d,num+1);
        arr[a-2][b+1]=0;
    }
    if(a-1<=8&&b+2<=8&&a-1>=0&&b+2>=0&&arr[a-1][b+2]==0){
        arr[a-1][b+2]=1;
        func(a-1,b+2,c,d,num+1);
        arr[a-1][b+2]=0;
    }
    return;
}
int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    func(a,b,c,d,0);
    cout<<flag<<endl;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值