Skip to content

Instantly share code, notes, and snippets.

@rajatdiptabiswas
Last active December 12, 2017 06:22
Show Gist options
  • Save rajatdiptabiswas/4c54165e4a27bb245aad3918875a70a9 to your computer and use it in GitHub Desktop.
Save rajatdiptabiswas/4c54165e4a27bb245aad3918875a70a9 to your computer and use it in GitHub Desktop.
Place N chess queens on an N×N chess board so that no two queens attack each other
#!/usr/bin/env python3
def n_queens(array, n, row):
if row >= n:
for i in range(n):
for j in range(n):
if array[i][j] == 1:
print("x", end = ' ')
else:
print("o", end = ' ')
print()
for i in range(n):
for j in range(n):
if array[i][j] == 1:
print(f"({i},{j}) ", end = ' ')
print("\n")
return 1
k = 0
for i in range(n):
if is_safe(array, row, i, n):
array[row][i] = 1
k += n_queens(array, n, row+1)
array[row][i] = 0
return k
def is_safe(array, x, y, n):
if x == 0:
return True
flag = True
for z in range(x, 0, -1):
if x-z >= 0 and y-z >= 0 and array[x-z][y-z] != 0:
flag = False
break
if x-z >= 0 and array[x-z][y] != 0:
flag = False
break
if x-z >=0 and y+z < n and array[x-z][y+z] != 0:
flag = False
break
return flag
if __name__ == '__main__':
n = 8
board = [[0 for i in range(n)] for j in range(n)]
count = n_queens(board, n, 0)
print(count)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment