O documento descreve o problema das N rainhas, que envolve colocar N rainhas em um tabuleiro NxN de forma que elas não possam se atacar. A solução proposta é realizar backtracking para tentar todas as posições válidas para cada rainha, verificando a cada passo se há ataques. O algoritmo é implementado em C++ para gerar todas as soluções possíveis para o problema.
7. Problema
Ops, as rainhas se atacam pela diagonal! Vamos tentar colocar a segunda rainha
em outro lugar...
R
R
8. Problema
Ops, as rainhas se atacam pela coluna! Vamos tentar colocar a segunda rainha
em outro lugar...
R
R
9. Problema
Ops, as rainhas se atacam pela linha! Em um tabuleiro NxN, devemos colocar N
rainhas de modo que elas não se ataquem por linha, coluna ou diagonal!
R R
18. Solução
Vamos resolver esse problema por backtracking...
A ideia é colocar a primeira rainha em uma posição da primeira coluna, a
segunda rainha em uma posição da segunda coluna, a terceira em uma posição
da terceira coluna e assim por diante...
Cada rainha irá se movimentar na sua coluna para tentarmos achar a solução!
Ao colocar uma rainha, é preciso verificar se elas se atacam.
Se elas se atacarem, realiza-se um backtracking (volta para algum estado
anterior) para tentar novamente de outra forma.
21. Solução
Coloca-se a segunda rainha numa posição da segunda coluna:
Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição...
R R
22. Solução
Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição...
Backtracking!
R
R
23. Solução
Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição...
Backtracking!
R R
24. Solução
Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição...
Backtracking!
R
R
25. Solução
Legal, conseguimos colocar a segunda rainha de forma que as rainhas não se
ataquem. Vamos tentar colocar a terceira rainha...
R
R
26. Solução
Colocamos a terceira rainha na terceira coluna.
Ops, as rainhas se atacam! Tenta colocar a terceira rainha em outra posição da
terceira coluna.
R R
R
27. Solução
Ops, as rainhas se atacam! Tenta colocar a terceira rainha em outra posição da
terceira coluna.
R
R
R
28. Solução
Ops, as rainhas se atacam! Tenta colocar a terceira rainha em outra posição da
terceira coluna.
R
R R
40. Algoritmo
Já conseguimos visualizar algumas coisas que temos que fazer.
Precisamos ter uma função para verificar se, ao colocar uma rainha numa
determinada posição, nenhuma rainha se atacará, ou seja, verifica a linha,
coluna e diagonais a partir da posição de onde iremos colocar a rainha.
41. Algoritmo
Precisamos de uma função para gerar as soluções.
“tab” é o tabuleiro, “N” é a dimensão e “col” é a coluna onde que vamos tentar
inserir a nova rainha.