样例都没过
输出样例:
8
9
我的输出:
9
9
代码如下(码风不好勿喷):
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int sx,sy,gx,gy,ans=1<<30,dp[22][22];
short m1[13]={-1,-2,-2,-1,1,2, 2, 1,2, 2,-2,-2};
short m2[13]={-2,-1, 1, 2,2,1,-1,-2,2,-2, 2,-2};
void dfs(int x,int y,int sum){
if(sum>=dp[x][y]&&dp[x][y]) return ;
dp[x][y]=sum;
if(x==1&&y==1){
ans=min(ans,sum);
return ;
}
for(int i=1;i<12;i++){
int mx=x+m1[i],my=y+m2[i];
if(mx>20||mx<1||my>20||my<1) continue;
dfs(mx,my,sum+1);
}
}
int main(){
cin>>sx>>sy;
sx=abs(sx); //防止出现负样例
sy=abs(sy);
cin>>gx>>gy;
gx=abs(gx);
gy=abs(gy);
dfs(sx,sy,0);
cout<<ans<<endl;
memset(dp,0,sizeof dp);
ans=1<<30;
dfs(gx,gy,0);
cout<<ans<<endl;
return 0;
}