0
点赞
收藏
分享

微信扫一扫

跳马 蓝桥杯

编程练习生J 2022-03-30 阅读 102
蓝桥杯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=d){
flag=num<flag ? num:flag;
}
if(a+1<=82<=81>=02>=01][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<=81<=82>=01>=02][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<=882>=002][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<=881>=001][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<=8800&&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<=8800&&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<=81<=801>=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<=82<=802>=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 条评论