git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| def print_board(board):
 | |
|     result = []
 | |
|     for row in range(8):
 | |
|         r = []
 | |
|         for col in range(8):
 | |
|             r.append("X" if col == board[row] else "-")
 | |
|         result.append(" ".join(r))
 | |
|     print("\n".join(result))
 | |
|     print()
 | |
| 
 | |
| def can_place(board, row, col):
 | |
|     column_occupied = not any([board[i] == col for i in range(row)])
 | |
| 
 | |
|     diagonals_clear = True
 | |
|     for r in range(row):
 | |
|         w = abs(col - board[r])
 | |
|         h = abs(r - row)
 | |
|         if w == h:
 | |
|             diagonals_clear = False
 | |
|             break
 | |
| 
 | |
|     return all([column_occupied, diagonals_clear])
 | |
| 
 | |
| def init_board():
 | |
|     board = []
 | |
|     for row in range(8):
 | |
|         board.append(None)
 | |
|     return board
 | |
| 
 | |
| def copy_board(board):
 | |
|     return board[:]
 | |
| 
 | |
| def n_queens():
 | |
|     do_n_queens(init_board(), 0, 0)
 | |
| 
 | |
| def do_n_queens(board, row, col):
 | |
|     if row == 8:
 | |
|         print_board(board)
 | |
|         return
 | |
|     for i in range(col, 8):
 | |
|         if can_place(board, row, i):
 | |
|             copy = copy_board(board)
 | |
|             copy[row] = i
 | |
|             do_n_queens(copy, row + 1, 0)
 | |
| 
 | |
| n_queens()
 |