Instruções
Implemente o Algoritmo das N-Rainhas
O problema das N-Rainhas pede que você coloque N rainhas em um tabuleiro de xadrez N×N de modo que nenhuma duas rainhas se ataquem (nenhuma duas compartilhem uma linha, coluna ou diagonal).
Por exemplo, se houver um tabuleiro 4x4, uma disposição válida é:
[1, 3, 0, 2]
Isso significa que na linha 0, a rainha está posicionada na coluna 1; na linha 1, a rainha está posicionada na coluna 3; na linha 2, a rainha está posicionada na coluna 0; e na linha 3, a rainha está posicionada na coluna 2.
Visualmente, esse arranjo se parece com:
. Q . .
. . . Q
Q . . .
. . Q .
Onde Q representa uma rainha e . representa uma casa vazia.
Neste laboratório, você implementará o resolvedor do problema das N-Rainhas usando a abordagem de busca em profundidade.
Objetivo: Cumprir as user stories abaixo e fazer com que todos os testes passem para completar o laboratório.
Histórias de Usuário:
1. Você deve ter uma função chamada dfs_n_queens.
2. A função deve aceitar exatamente um argumento: um inteiro n.
3. Se n for menor que 1, a função deve retornar uma lista vazia ([]).
4. A função deve retornar uma lista de soluções; cada solução é ela mesma uma lista de comprimento n, onde o elemento no índice i é o índice da coluna (baseado em 0) da rainha na linha i.
O que fazer:
Testes:
- Você deve ter uma função chamada `dfs_n_queens` que recebe um argumento.
- Se `n` for menor que `1`, a função deve retornar uma lista vazia.
- A função deve retornar uma lista de soluções, onde cada solução é uma lista de comprimento `n`.
- `dfs_n_queens(1)` deve retornar `[[0]]`.
- `dfs_n_queens(2)` deve retornar `[]`.
- `dfs_n_queens(3)` deve retornar `[]`.
- `dfs_n_queens(4)` deve retornar `[[1, 3, 0, 2], [2, 0, 3, 1]]`.
- `dfs_n_queens(5)` deve retornar `[[0, 2, 4, 1, 3], [0, 3, 1, 4, 2], [1, 3, 0, 2, 4], [1, 4, 2, 0, 3], [2, 0, 3, 1, 4], [2, 4, 1, 3, 0], [3, 0, 2, 4, 1], [3, 1, 4, 2, 0], [4, 1, 3, 0, 2], [4, 2, 0, 3, 1]]`.
- `len(dfs_n_queens(5))` deve ser `10`.
- `len(dfs_n_queens(8))` deve ser `92`.
- `dfs_n_queens` deve retornar o resultado correto.
Preview