我正在尝试解决Knight在Geeks4Geeks上的步骤,但在以下输入中我得到了WA 20 5 7 15 20 正确的答案是9我要398。请帮助
问题:
给出N×N大小的方形棋盘,给出骑士的位置和目标的位置。我们需要找出骑士到达目标位置所需的最低限度步骤。
输入: 输入的第一行包含一个整数T,它表示测试用例的数量。然后是T测试用例。每个测试用例都包含一个整数n,该整数n表示方形棋盘的大小。下一行包含骑士的X-Y坐标。下一行包含目标的X-Y坐标。
输出: 打印骑士到达目标位置所需的最小步幅。
我的解决方案:
import java.util.*;
import java.lang.*;
import java.io.*;
public class GFG {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t =sc.nextInt();
while(t-->0){
int n = sc.nextInt();
int kx = sc.nextInt();
int ky = sc.nextInt();
int tx = sc.nextInt();
int ty = sc.nextInt();
int dx[] = {-2, -1, 1, 2, -2, -1, 1, 2};
int dy[] = {-1, -2, -2, -1, 1, 2, 2, 1};
boolean[][] visited = new boolean[n+1][n+1];
System.out.println(sbk(kx,ky,tx,ty,0,visited,0,dx,dy,n));
}
}
private static int sbk(int kx, int ky, int tx, int ty, int j, boolean[][] visited, int count, int[] dx, int[] dy,int n) {
if(!isValid(kx,ky,n))
return Integer.MAX_VALUE;
if(visited[kx][ky])
return Integer.MAX_VALUE;
if(kx==tx && ky==ty)
return count;
visited[kx][ky] = true;
int min = Integer.MAX_VALUE;
for(int i=0;i<=7;i++){
int res = sbk(kx+dx[i],ky+dy[i],tx,ty,0,visited,count+1,dx,dy,n);
if(res<min)
min=res;
}
return min;
}
private static boolean isValid(int kx, int ky,int n) {
if(kx>n || kx<0 || ky>n || ky<0)
return false;
return true;
}
}