DEV Community

Prashant Mishra
Prashant Mishra

Posted on

N queen Problem

N queen

class Solution {
    List<List<String>> list = new ArrayList<>();
    public List<List<String>> solveNQueens(int n) {
        //try to put in the first row
        char[][] grid = new char[n][n];
        for(char c[] : grid){
            Arrays.fill(c, '.');
        }

        check(0,grid,n);
        return list;
    }

    public void check(int i,char [] grid[], int n){
        if(i>=n){
            found(grid);
            return;
        }
        for(int j = 0;j<n;j++){
            if(canPlace(i,j,grid)){
                grid[i][j] = 'Q';
                check(i+1,grid,n);
                grid[i][j] = '.';
            }
        }
    }
    public void found(char[][] grid){
        List<String> l = new ArrayList<>();
        for(int i =0;i<grid.length;i++){
            l.add(new String(grid[i]));
        }
        list.add(l);
    }
    public boolean canPlace(int i ,int j, char grid[][]){
        //base case
        if(grid[i][j] == 'Q') return false;
        int I = i;
        int J = j;
        //same column back
        while(I>=0){
            if(grid[I][j]=='Q') return false;
            I--;
        }
        I = i;
        J = j;
        //diagonal left up 
       while(I>=0 && J>=0){
            if(grid[I][J]=='Q') return false;
            I--;
            J--;
        }
        I = i;
        J = j;
        //diagonal right up
        while(I>=0 && J<grid[0].length){
            if(grid[I][J]=='Q') return false;
            I--;
            J++;
        }
        return true;
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)