Open In App

# Python Program for N Queen Problem | Backtracking-3

The N Queen is the problem of placing N chess queens on an NĂ—N chessboard so that no two queens attack each other. For example, the following is a solution for 4 Queen problem.

The expected output is a binary matrix that has 1s for the blocks where queens are placed. For example, the following is the output matrix for above 4 queen solution.

```              { 0,  1,  0,  0}
{ 0,  0,  0,  1}
{ 1,  0,  0,  0}
{ 0,  0,  1,  0}```

## Python3

 `# Python program to solve N Queen``# Problem using backtracking` `global` `N``N ``=` `4` `def` `printSolution(board):``    ``for` `i ``in` `range``(N):``        ``for` `j ``in` `range``(N):``            ``print` `(board[i][j],end``=``' '``)``        ``print``()`  `# A utility function to check if a queen can``# be placed on board[row][col]. Note that this``# function is called when "col" queens are``# already placed in columns from 0 to col -1.``# So we need to check only left side for``# attacking queens``def` `isSafe(board, row, col):` `    ``# Check this row on left side``    ``for` `i ``in` `range``(col):``        ``if` `board[row][i] ``=``=` `1``:``            ``return` `False` `    ``# Check upper diagonal on left side``    ``for` `i, j ``in` `zip``(``range``(row, ``-``1``, ``-``1``), ``range``(col, ``-``1``, ``-``1``)):``        ``if` `board[i][j] ``=``=` `1``:``            ``return` `False` `    ``# Check lower diagonal on left side``    ``for` `i, j ``in` `zip``(``range``(row, N, ``1``), ``range``(col, ``-``1``, ``-``1``)):``        ``if` `board[i][j] ``=``=` `1``:``            ``return` `False` `    ``return` `True` `def` `solveNQUtil(board, col):``    ``# base case: If all queens are placed``    ``# then return true``    ``if` `col >``=` `N:``        ``return` `True` `    ``# Consider this column and try placing``    ``# this queen in all rows one by one``    ``for` `i ``in` `range``(N):` `        ``if` `isSafe(board, i, col):``            ``# Place this queen in board[i][col]``            ``board[i][col] ``=` `1` `            ``# recur to place rest of the queens``            ``if` `solveNQUtil(board, col ``+` `1``) ``=``=` `True``:``                ``return` `True` `            ``# If placing queen in board[i][col``            ``# doesn't lead to a solution, then``            ``# queen from board[i][col]``            ``board[i][col] ``=` `0` `    ``# if the queen can not be placed in any row in``    ``# this column col  then return false``    ``return` `False` `# This function solves the N Queen problem using``# Backtracking. It mainly uses solveNQUtil() to``# solve the problem. It returns false if queens``# cannot be placed, otherwise return true and``# placement of queens in the form of 1s.``# note that there may be more than one``# solutions, this function prints one  of the``# feasible solutions.``def` `solveNQ():``    ``board ``=` `[ [``0``, ``0``, ``0``, ``0``],``              ``[``0``, ``0``, ``0``, ``0``],``              ``[``0``, ``0``, ``0``, ``0``],``              ``[``0``, ``0``, ``0``, ``0``]``             ``]` `    ``if` `solveNQUtil(board, ``0``) ``=``=` `False``:``        ``print` `(``"Solution does not exist"``)``        ``return` `False` `    ``printSolution(board)``    ``return` `True` `# driver program to test above function``solveNQ()` `# This code is contributed by Divyanshu Mehta`

Output:

```0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0```

Time Complexity: O(N2)

Auxiliary Space: O(N)

Please refer complete article on N Queen Problem | Backtracking-3 for more details!