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 dfsNQueens.
2. A função deve aceitar exatamente um argumento: um inteiro n.
3. Se n for menor que 1, a função deve retornar um array vazio ([]).
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 `dfsNQueens` que recebe um argumento.
- Se `n` for menor que `1`, a função deve retornar um array vazio.
- A função deve retornar um array de soluções, onde cada solução é um array de comprimento `n`.
- `dfsNQueens(1)` deve retornar `[[0]]`.
- `dfsNQueens(2)` deve retornar `[]`.
- `dfsNQueens(3)` deve retornar `[]`.
- `dfsNQueens(4)` deve retornar `[[1, 3, 0, 2], [2, 0, 3, 1]]`.
- `dfsNQueens(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]]`.
- `dfsNQueens(5).length` deve ser `10`.
- `dfsNQueens(8).length` deve ser `92`.
- `dfsNQueens` deve retornar o resultado correto.
Preview