#! /usr/bin/python3 import sys def nqueens(board_width): board = [0] current_row = 0 while True: conflict = False for review_index in range(0, current_row): left = board[review_index] - (current_row - review_index) right = board[review_index] + (current_row - review_index); if (board[current_row] == board[review_index] or (left >= 0 and left == board[current_row]) or (right < board_width and right == board[current_row])): conflict = True; break if (current_row == 0 and conflict == False): board.append(0) current_row = 1 continue if (conflict == True): board[current_row] += 1 if (current_row == 0 and board[current_row] == board_width): print("No solution exists for specificed board size.") return None while True: if (board[current_row] == board_width): board[current_row] = 0 if (current_row == 0): print("No solution exists for specificed board size.") return None board.pop() current_row -= 1 board[current_row] += 1 if board[current_row] != board_width: break else: current_row += 1 if (current_row == board_width): break board.append(0) return board def print_board(board): if (board == None): return board_width = len(board) for row in range(board_width): line_print = [] for column in range(board_width): if column == board[row]: line_print.append("Q") else: line_print.append(".") print(line_print) if __name__ == '__main__': default_width = 8 for arg in sys.argv: if (arg.isdecimal() and int(arg) > 3): default_width = int(arg) break if (default_width == 8): print("Running algorithm with board size of 8. Specify an alternative Chess board size for N-Queens as a command line argument.") board = nqueens(default_width) print(board) print_board(board)