Sunteți pe pagina 1din 49

Teoria dos Grafos

Busca em Profundidade
Professor: Humberto Nigri
hnigri@gmail.com

Algoritmos de Caminhamento
! Busca

em Profundidade

! Busca

em Largura

! Algoritmo

de Dijkstra

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

No visitados
0
Visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
(1) Marque todos os vrtices como
no visitados

(2) Escolha um vrtice no visitado


V aleatoriamente e marque o
como visitado
(3) Escolha aleatoriamente um
vizinho de V no visitado e
marque o como visitado
(4) Repita o passo (3) enquanto
existirem vizinhos no
visitados
(5) Volte ao vrtice pai e repita
o passo (3)
(6) Se existirem vrtices no
visitados, volte ao passo (2)

2
5
3

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
visite(v)

visite (V)
Marque V como visitado
para cada vizinho i (no visitado) de V faa
visite (i)

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
visite(v)
(1) Marque todos os
vrtices como no

visite (V)
visitados

Marque V como visitado


No visitados
para cada vizinho i (no visitado) de V faa
Visitados
visite (i)

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
visite(v)
(2) Escolha um vrtice no
visitado V aleatoriamente e

visite (V)
marque o como visitado
Marque V como visitado
para cada vizinho i (no visitado) de V faa
visite (i)

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
(3) Escolha
aleatoriamente
visite(v)
um vizinho de V no visitado
e marque o como visitado

(4) Repita o passo


anterior enquanto

existirem vizinhos no

visite (V)
visitados
Marque V como visitado
para cada vizinho i (no visitado) de V faa
visite (i)

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
visite(v)
(5) Volte ao vrtice pai e
repita o passo (3)

Voltar para o pai significa acabar a


funo visite chamada recursivamente

visite (V)
Marque V como visitado
para cada vizinho i (no visitado) de V faa
visite (i)

Busca em Profundidade
Algoritmo
Marque todos os vrtices como no visitados
para cada vrtice V no visitado faa
visite(v)

(6) Se
existirem
visite
(V) vrtices

A volta ao passo (2) acontece por


causa deste loop

no visitados,
ao visitado
Marquevolte
V como

cada vizinho i (no visitado) de V faa


passo para
(2)
visite (i)

Exerccios
! Como

adaptar o algoritmo de busca em

profundidade para contabilizar o nmero de


componentes em um grafo ?

! Como

adaptar o algoritmo de busca em

profundidade para encontrarmos a soluo


tima do PCV?

S-ar putea să vă placă și