样例都过了
#include<iostream>
#include<queue>
using namespace std;
int x,y;
struct node{
int x;
int y;
int s;
};
queue<node>q;
int a[21][21];
int vis[21][21];
int dx[12]={2,2,-2,-2,1,1,-1,1,2,2,-2,-2};
int dy[12]={1,-1,1,1,2,-2,2,2,2,-2,2,-2};
void bfs(){
q.push(node{x,y,0});
vis[x][y]=1;
while(!q.empty()){
if(q.front().x==1 && q.front().y==1){
cout<<q.front().s-1<<endl;
return;
}
for(int i=0;i<12;i++){
int xx=q.front().x+dx[i];
int yy=q.front().y+dy[i];
if(xx>20 || yy>20 || xx<1 || yy<1){
continue;
}
if(xx>=1 && yy>=1 && xx<=x && yy<=y && vis[xx][yy]!=1){
vis[xx][yy]=1;
q.push(node{xx,yy,q.front().s+1});
}
}
q.pop();
}
}
int main(){
cin>>x>>y;
bfs();
for(int i=1;i<21;i++){
for(int j=1;j<21;j++){
vis[i][j]=0;
}
}
while(!q.empty()){
q.pop();
}
cin>>x>>y;
bfs();
return 0;
}