Anda di halaman 1dari 35

Backtracking

Katia Guimares
katia@cin.ufpe.br 2
Backtracking
Tcnica em procedimentos de busca que
corresponde ao retorno de uma explorao.
Ex: (j visto) Busca-em-Profundidade
Quando chegamos a um n v pela primeira vez,
cada aresta incidente a v explorada e ento o
controle volta (backtracks) ao n a partir do
qual v foi alcanado.
katia@cin.ufpe.br 3
Problema das Oito Rainhas
Colocar oito rainhas num tabuleiro de
xadrez, de forma que nenhuma delas
fique atacada por outra.
Em outras palavras, escolher oito posies no
tabuleiro de forma que no haja duas delas
compartilhando a mesma linha, a mesma
coluna ou a mesma diagonal.
katia@cin.ufpe.br 4
Algoritmo para
O Problema das Oito Rainhas
1. Coloque uma rainha na posio mais esquerda
da primeira linha.
2. Enquanto no houver oito rainhas no tabuleiro faa:
Se na prxima linha existir uma coluna que no
est sob ataque de uma rainha j no tabuleiro
ento coloque uma rainha nesta posio
seno volte linha anterior /* backtrack */
mova a rainha o mnimo necessrio
para a direita de forma que ela
no fique sob ataque
katia@cin.ufpe.br 5
Algoritmo para
O Problema das Oito Rainhas
Q
katia@cin.ufpe.br 6
Algoritmo para
O Problema das Oito Rainhas
Q
Q
katia@cin.ufpe.br 7
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
katia@cin.ufpe.br 8
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
katia@cin.ufpe.br 9
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
katia@cin.ufpe.br 10
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
katia@cin.ufpe.br 11
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
katia@cin.ufpe.br 12
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 13
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q


katia@cin.ufpe.br 14
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 15
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
Q

katia@cin.ufpe.br 16
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
Q
Q

katia@cin.ufpe.br 17
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
Q
Q

katia@cin.ufpe.br 18
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
Q

katia@cin.ufpe.br 19
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q
Q

katia@cin.ufpe.br 20
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 21
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 22
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 23
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 24
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q
Q

katia@cin.ufpe.br 25
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q


katia@cin.ufpe.br 26
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q



katia@cin.ufpe.br 27
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q


katia@cin.ufpe.br 28
Algoritmo para
O Problema das Oito Rainhas
Q
Q
Q
Q


katia@cin.ufpe.br 29
Algoritmo para
O Problema das Oito Rainhas

incio
(1,1)
(2,3)
(3,5)
(4,2)
(5,4) (5,8)
(4,7)
(5,2)
(6,4)
(7,6)
(5,4)
katia@cin.ufpe.br 30
Problema da 3-Colorao

Dado um grafo G(V, E), encontrar uma 3-colorao
de G, ou seja, definir uma funo cor: V {1, 2, 3}
de forma que
Se (u,v) uma aresta em E ento cor (u) cor (v).
Ex:
katia@cin.ufpe.br 31
Algoritmo para 3-Colorao
Para v 1 at n faa
cor (v) 0;
cor (1) 1;
Se (3-Colorir (1)) ento
imprima cor
seno imprima Impossvel 3-colorir
katia@cin.ufpe.br 32
Algoritmo para 3-Colorao
Procedimento 3-Colorir (v):
Se v = n ento {retorne (suc) }
Tome o vrtice z v +1
Se z no tem vizinhos w com cor (w) = 1
ento {cor (z) 1;
se (3-Colorir (z)) retorne (suc) }
Se z no tem vizinhos w com cor (w) = 2
ento {cor (z) 2;
se (3-Colorir (z)) retorne (suc) }
Se z no tem vizinhos w com cor (w) = 3
ento {cor (z) 3;
se (3-Colorir (z)) retorne (suc) }
cor (z) 0; retorne (fail); /* backtrack */
katia@cin.ufpe.br 33
O Problema da 3-Colorao

1
2
3
4
5
6
7
?
katia@cin.ufpe.br 34
O Problema da 3-Colorao

1
2
3
4
5
6
7
katia@cin.ufpe.br 35
Branch-and-Bound

Uma outra tcnica muito usada que est relacionada com
Backtracking a tcnica chamada Branch-and-Bound.

Branch-and-Bound uma tcnica de explorao mais
sofisticada, que procura explorar opes (branch), mas
colocando um limite quantitativo (bound), com o objetivo
de evitar buscas em espaos menos promissores.

Ex: Anlise das possveis seqncias de lances na
implementao de um jogo, explorando os
lances que parecem melhores, uma vez que o
nmero total de possibilidades muito grande.

Anda mungkin juga menyukai