国际象棋骑士-最短路径

问题描述

我正在尝试解决此问题: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 (将#修改为@)