题目链接
bfs,不多说,注意12个方向
import java.util.*;
import java.math.*;
public class Main {
public static int[] dx={2,2,-2,-2,1,1,-1,-1,2,2,-2,-2};
public static int[] dy={-2,2,-2,2,-2,2,-2,2,1,-1,-1,1};
public static int x1=0,x2=0,y1=0,y2=0;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
x1=sc.nextInt();
y1=sc.nextInt();
System.out.println(bfs(x1,y1));
x2=sc.nextInt();
y2=sc.nextInt();
System.out.println(bfs(x2,y2));
}
public static int bfs(int x,int y){
Queue<int[]> q=new LinkedList<int[]>();
int[][] map=new int[22][22];
q.offer(new int[]{x,y,0});
map[x][y]=1;
while(!q.isEmpty()){
int[] cur=q.poll();
int cx=cur[0];
int cy=cur[1];
int cs=cur[2];
if(cx==1&&cy==1)
return cs;
for(int i=0;i<12;i++){
int xx=cx+dx[i];
int yy=cy+dy[i];
if(xx<=0||yy<=0||xx>21||yy>21||map[xx][yy]==1)
continue;
map[xx][yy]=1;
q.offer(new int[]{xx,yy,cs+1});
}
}
return -1;
}
}