0
点赞
收藏
分享

微信扫一扫

跳马 蓝桥杯

编程练习生J 2022-03-30 阅读 104
蓝桥杯c++

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

#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;
}
举报

相关推荐

0 条评论