O problema da N-Queens é um desafio clássico frequentemente encontrado em entrevistas de programação e ambientes acadêmicos. O desafio é colocar N Queens em um tabuleiro de xadrez n × n, de modo que não há duas rainhas se ameaçam. Isso significa que não há duas rainhas que não possam compartilhar a mesma linha, coluna ou diagonal.
Dado um número inteiro, retorne todas as soluções distintas ao quebra-cabeça N-Queens. Você pode retornar as respostas em qualquer ordem.
Cada solução contém uma configuração distinta da placa do posicionamento N-Queens, onde 'Q' indica uma rainha e ''. indica um espaço vazio.
Para n = 4, as soluções possíveis são:
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
A abordagem mais comum para resolver o problema da N-Queens é usar o backtracking. O algoritmo de retrocesso constrói de forma incremental candidatos à solução e abandona um candidato assim que determinar que o candidato não pode levar a uma solução válida.
Passos:
Initialize the Board : comece com uma placa N × N vazia.Place the Queen : tente colocar a rainha na primeira fila e prossiga para colocar as rainhas subsequentes.Check Validity : para cada colocação da rainha, verifique se ele entra em conflito com as rainhas já colocadas.Backtrack if Necessary : Se colocar uma rainha levar a nenhuma solução, remova a rainha (backtrack) e tente a próxima posição.Store the Solution : se uma configuração válida for encontrada (N Queens colocada), armazene a configuração da placa.Repeat : continue esse processo até que todas as configurações possíveis tenham sido tentadas.A placa pode ser representada usando uma lista 2D em que cada célula é 'q' ou '.'.
Verificar com eficiência os conflitos é crucial:
Row Check : garantindo que nenhuma outra rainha esteja na mesma linha.Column Check : garantindo que nenhuma outra rainha esteja na mesma coluna.Diagonal Check : garantindo que nenhuma outra rainha esteja na mesma diagonal.O uso de conjuntos para rastrear colunas e diagonais ocupados pode acelerar o processo de verificação de conflitos.
Para otimizar a solução do problema para N maior, a solução aproveita a simultaneidade com o ThreadPoolExecutor:
Essa solução veio a um dos nossos desafios gratuitos de sexta -feira , onde escolhemos desafios de entrevistas aleatórias durante nosso tempo de inatividade para escrever soluções.
pip install wolfsoftware.NQueens
usage: nqueens [-h] [-v] [-V] [board_size]
See solutions to the NQueens problem.
positional arguments:
board_size Size of the board (default is 8 for the Eight Queens puzzle) (default: 8)
flags:
-h, --help Show this help message and exit
-v, --verbose Enable verbose output - show the actual boards (default: False)
-V, --version Show program's version number and exit.
The N Queens puzzle is the problem of placing N chess queens on an N×N chessboard so that no two queens threaten each other.
O problema do N-Queens é um desafio fascinante e complexo que requer uma profunda compreensão das técnicas de recursão, retrocesso e otimização. Ao alavancar multi-threading, essa implementação encontra com eficiência todas as soluções possíveis para um determinado tamanho da placa. Compreender e implementar o problema N-Queens é um exercício valioso para melhorar as habilidades de solução de problemas e o pensamento algorítmico.