Enhance readability of N Queens (#9265)

* Enhance readability of N Queens

* Simplify is_safe code

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Apply suggestions from code review

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Tianyi Zheng <tianyizheng02@gmail.com>
This commit is contained in:
Hardik Pawar 2023-10-23 00:21:56 +05:30 committed by GitHub
parent 6c8743f1e6
commit a8b94abc8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,40 +17,39 @@ def is_safe(board: list[list[int]], row: int, column: int) -> bool:
This function returns a boolean value True if it is safe to place a queen there
considering the current state of the board.
Parameters :
board(2D matrix) : board
row ,column : coordinates of the cell on a board
Parameters:
board (2D matrix): The chessboard
row, column: Coordinates of the cell on the board
Returns :
Returns:
Boolean Value
"""
for i in range(len(board)):
if board[row][i] == 1:
return False
for i in range(len(board)):
if board[i][column] == 1:
return False
for i, j in zip(range(row, -1, -1), range(column, -1, -1)):
if board[i][j] == 1:
return False
for i, j in zip(range(row, -1, -1), range(column, len(board))):
if board[i][j] == 1:
return False
return True
n = len(board) # Size of the board
# Check if there is any queen in the same row, column,
# left upper diagonal, and right upper diagonal
return (
all(board[i][j] != 1 for i, j in zip(range(row, -1, -1), range(column, n)))
and all(
board[i][j] != 1 for i, j in zip(range(row, -1, -1), range(column, -1, -1))
)
and all(board[i][j] != 1 for i, j in zip(range(row, n), range(column, n)))
and all(board[i][j] != 1 for i, j in zip(range(row, n), range(column, -1, -1)))
)
def solve(board: list[list[int]], row: int) -> bool:
"""
It creates a state space tree and calls the safe function until it receives a
False Boolean and terminates that branch and backtracks to the next
This function creates a state space tree and calls the safe function until it
receives a False Boolean and terminates that branch and backtracks to the next
possible solution branch.
"""
if row >= len(board):
"""
If the row number exceeds N we have board with a successful combination
If the row number exceeds N, we have a board with a successful combination
and that combination is appended to the solution list and the board is printed.
"""
solution.append(board)
printboard(board)
@ -58,9 +57,9 @@ def solve(board: list[list[int]], row: int) -> bool:
return True
for i in range(len(board)):
"""
For every row it iterates through each column to check if it is feasible to
For every row, it iterates through each column to check if it is feasible to
place a queen there.
If all the combinations for that particular branch are successful the board is
If all the combinations for that particular branch are successful, the board is
reinitialized for the next possible combination.
"""
if is_safe(board, row, i):
@ -77,14 +76,14 @@ def printboard(board: list[list[int]]) -> None:
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 1:
print("Q", end=" ")
print("Q", end=" ") # Queen is present
else:
print(".", end=" ")
print(".", end=" ") # Empty cell
print()
# n=int(input("The no. of queens"))
# Number of queens (e.g., n=8 for an 8x8 board)
n = 8
board = [[0 for i in range(n)] for j in range(n)]
solve(board, 0)
print("The total no. of solutions are :", len(solution))
print("The total number of solutions are:", len(solution))