 Open in App
Not now

# Python Program for N Queen Problem | Backtracking-3

• Difficulty Level : Expert
• Last Updated : 31 May, 2022

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!

My Personal Notes arrow_drop_up
Related Articles