Top Banner
Problema das N rainhas MARCOS CASTRO
43

Problema das N rainhas (Backtracking)

Apr 16, 2017

Download

Science

Marcos Castro
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Problema das N rainhas (Backtracking)

Problema das N rainhas

MARCOS CASTRO

Page 2: Problema das N rainhas (Backtracking)

Problema Imagine um tabuleiro 8x8...

Page 3: Problema das N rainhas (Backtracking)

Problema Objetivo: colocar 8 rainhas sem que elas possam se atacar pela linha, coluna ou diagonal.

Page 4: Problema das N rainhas (Backtracking)

Problema Vamos representar o R como sendo a rainha...

Page 5: Problema das N rainhas (Backtracking)

Problema Vamos colocar a primeira rainha...

Page 6: Problema das N rainhas (Backtracking)

Problema Vamos colocar a segunda rainha...

R

Page 7: Problema das N rainhas (Backtracking)

Problema Ops, as rainhas se atacam pela diagonal! Vamos tentar colocar a segunda rainha em outro lugar...

R

R

Page 8: Problema das N rainhas (Backtracking)

Problema Ops, as rainhas se atacam pela coluna! Vamos tentar colocar a segunda rainha em outro lugar...

R

R

Page 9: Problema das N rainhas (Backtracking)

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

Page 10: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

Page 11: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

Page 12: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

Page 13: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

R

Page 14: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

R

R

Page 15: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

R

R

R

Page 16: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

R

R

R

R

Page 17: Problema das N rainhas (Backtracking)

Problema Construindo uma solução válida... As partes em vermelho não se pode colocar rainhas.

R

R

R

R

R

R

R

R

Page 18: Problema das N rainhas (Backtracking)

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.

Page 19: Problema das N rainhas (Backtracking)

Solução Veja o tabuleiro 4x4:

Page 20: Problema das N rainhas (Backtracking)

Solução Coloca-se a primeira rainha numa posição da primeira coluna:

R

Page 21: Problema das N rainhas (Backtracking)

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

Page 22: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição... Backtracking!

R

R

Page 23: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição... Backtracking!

R R

Page 24: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam, tenta colocar a segunda rainha em outra posição... Backtracking!

R

R

Page 25: Problema das N rainhas (Backtracking)

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

Page 26: Problema das N rainhas (Backtracking)

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

Page 27: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam! Tenta colocar a terceira rainha em outra posição da terceira coluna.

R

R

R

Page 28: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam! Tenta colocar a terceira rainha em outra posição da terceira coluna.

R

R R

Page 29: Problema das N rainhas (Backtracking)

Solução Ops, as rainhas se atacam! Não conseguimos , realizamos o backtracking...

R

R

R

Page 30: Problema das N rainhas (Backtracking)

Solução Mais backtracking...

R

R

Page 31: Problema das N rainhas (Backtracking)

Solução Tentamos uma posição diferente para a primeira rainha....

R

Page 32: Problema das N rainhas (Backtracking)

Solução Vamos colocar a segunda rainha... Ops, elas se atacam!

R

R

Page 33: Problema das N rainhas (Backtracking)

Solução Ops, elas se atacam novamente!

R R

Page 34: Problema das N rainhas (Backtracking)

Solução Ops, elas se atacam novamente!

R

R

Page 35: Problema das N rainhas (Backtracking)

Solução Ok, finalmente conseguimos colocar a segunda rainha!

R

R

Page 36: Problema das N rainhas (Backtracking)

Solução Vamos colocar a terceira... Legal!! Conseguimos colocar a terceira!

R

R

R

Page 37: Problema das N rainhas (Backtracking)

Solução Vamos colocar a quarta... Ops, elas se atacam....

R R

R

R

Page 38: Problema das N rainhas (Backtracking)

Solução Ops, elas ainda se atacam...

R

R R

R

Page 39: Problema das N rainhas (Backtracking)

Solução Legal!! Conseguimos colocar as 4 rainhas de forma que elas não se ataquem!

R

R

R

R

Page 40: Problema das N rainhas (Backtracking)

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.

Page 41: Problema das N rainhas (Backtracking)

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.

Page 42: Problema das N rainhas (Backtracking)

Implementação Código em C++:

◦ https://gist.github.com/marcoscastro/501e816d6bb42a104eba