问题描述
我正在尝试解决此问题:https://www.interviewbit.com/problems/knight-on-chess-board/#
基本上,您会得到一个木板,一个起点和一个终点,并且必须找到最短的路径。我正在尝试使用骑士可以进行的8种动作在板上进行BFS,并返回所采取的动作数;如果没有解决方案,则返回-1。我遇到了内存不足的运行时错误。我不确定错误(或潜在错误)的发生位置。
编辑:以前我遇到错误,因为我忘记将节点标记为已访问。我已经添加了,但是我仍然没有得到正确的答案。
public class Solution {
private class Node {
int row;
int col;
int count;
public Node() {
this.row = 0;
this.col = 0;
this.count = 0;
}
public Node(int row,int col,int count) {
this.row = row;
this.col = col;
this.count = count;
}
}
public int knight(int A,int B,int sr,int sc,int er,int ec) {
int[][] matrix = new int[A][B];
Queue<Node> q = new LinkedList<>(); //linkedlist??
Node n = new Node(sr,sc,0);
q.add(n);
matrix[sr][sc] = -1;
final int[][] SHIFTS = {
{-2,1},{-2,-1},{2,{-1,2},-2},{1,-2}
};
int count = 0;
while(!q.isEmpty()) {
Node cur = q.remove();
if(cur.row == er && cur.col == ec) {
return cur.count;
}
for(int[] i : SHIFTS) {
if(canTraverse(matrix,cur.row + i[0],cur.col + i[1])) {
matrix[cur.row + i[0]][cur.col + i[1]] = -1;
q.add(new Node(cur.row + i[0],cur.col + i[1],cur.count + 1));
}
}
}
return -1;
}
public static boolean canTraverse(int[][] matrix,int sc) {
if(sr < 0 || sr >= matrix.length || sc < 0 || sc >= matrix[sr].length || matrix[sr][sc] == -1) {
return false;
}
return true;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)