DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

N-Queens

The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle. You may return the answer in any order.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.

Example 1:

Input: n = 4
Output: [[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above

Example 2:

Input: n = 1
Output: [["Q"]]

Constraints:

  • 1 <= n <= 9

SOLUTION:

class Solution:
    def getAllPos(self, usedCols, usedPosDiag, usedNegDiag, i, n):
        if i >= n:
            return [[]]
        op = []
        for j in range(n):
            if j not in usedCols and (i + j) not in usedPosDiag and (i - j) not in usedNegDiag:
                val = self.getAllPos(usedCols.union({j}), usedPosDiag.union({i + j}), usedNegDiag.union({i - j}), i + 1, n)
                op += [[j] + v for v in val]
        return op

    def getRow(self, i, n):
        val = ["."] * n
        val[i] = "Q"
        return "".join(val)

    def solveNQueens(self, n: int) -> List[List[str]]:
        queens = self.getAllPos(set(), set(), set(), 0, n)
        return [[self.getRow(i, n) for i in q] for q in queens]
Enter fullscreen mode Exit fullscreen mode

Top comments (0)