Q48 Knight Probability in Chessboard - LeetCode 688

PHOTO EMBED

Fri Mar 31 2023 04:57:49 GMT+0000 (Coordinated Universal Time)

Saved by @Ayush_dabas07

class Solution {
    
    public boolean isValid(int ni , int nj , int n ){

        if(ni < 0 || nj < 0 || ni >= n || nj >= n)
        return false;

        return true;
    }
    public double knightProbability(int n, int k, int row, int col) {
        /* Q48 in dp playlist ,current represent current instance of the board,
        next represent next instance of the board in the end we swap curr &
        next and make next to 0 again so that we can use it store the prob of
        next moves which will impact the board cells

        in the end we loop over the latest board and add all the probibilites
        on all cell which will give us probibility that knight remains on the 
        board
        */

        double[][] curr = new double[n][n];
        double[][] next = new double[n][n];

        //making a direction array to loop over for the knights 8 moves
        int[][] dir = {{2,1},{2,-1},{1,2},{1,-2},{-2,1},{-2,-1},{-1,2},{-1,-2}};

        //for the very first instance probibility of center cell will be 1
        curr[row][col] = 1;

        //looping for k moves
        for(int moves = 0 ; moves < k ; moves++){
            
        //looping the current board and storing effect of knight move on next
            for(int i = 0 ; i < n ; i++ ){

                for(int j = 0 ; j < n ; j++){
                    
                    if(curr[i][j] != 0){
                        int ni = 0 , nj = 0;    //next i , next j
                        for(int d = 0 ; d < 8 ; d++){
                            ni = i + dir[d][0];
                            nj = j + dir[d][1];

                            if(isValid(ni,nj,n))
                            next[ni][nj] += curr[i][j]/8.0;
                        }
                    }
                }
            }
        //to store the probibilities of next move we do the following 
            curr = next;
            next = new double[n][n];
        }

        //now we add all the probibilites of the latest board and return it 
        double prob = 0;
        for(int i = 0 ; i < n ; i++){
            for(int j = 0 ; j < n ; j++)
            prob += curr[i][j];
        }

        return prob;
    }
}









content_copyCOPY

https://leetcode.com/problems/knight-probability-in-chessboard/