Você está na página 1de 22

Busca em

Grafos
Byron Leite
Dantas Bezerra
Introdução
 Busca ou caminhamento
 Procedimento utilizado para
explorar um grafo
 É eficiente se o custo computacional
ao visitar todos os vértices é
proporcional ao seu tamanho.
 Tipos de busca eficientes
 Busca em Profundidade
 Busca em Largura

Byron Leite Dantas Bezerra


Busca em
Profundidade

Byron Leite Dantas Bezerra


Aplicações
 Encontrar um caminho de um
vértice a outro do grafo
 Determinar se um grafo é
conexo
 Achar uma árvore de cobertura
de um grafo conexo

Byron Leite Dantas Bezerra


Analogia
 Semelhante a idéia
de caminhar em um
labirinto.
 Ou seja, andamos no
labirinto sempre
apoiando a mão
esquerda nas
paredes do labirinto
(de forma a marcar
por onde passamos).
 Se houver uma saída,
encontraremos!

Byron Leite Dantas Bezerra


Conceitos
 Aresta de Descoberta
 O vértice de destino ainda não foi
explorado
 Equivalem às paredes do labirinto
ainda não marcadas
 Aresta de Retorno
 O vértice de destino já foi
explorado
 Equivalem às paredes já marcadas

Byron Leite Dantas Bezerra


Algoritmo
 Entrada: um grafo G e um vértice v de G.
 Saída: depende do objetivo do
caminhamento
Para todos os vértices w tal que existe a
aresta e=(v,w) faça
Se e for inexplorada então
Se w for inexplorado então
rotule e como “descoberta”
chame recursivamente passando G e w
Senão
rotule e como sendo de “retorno”

Isso depende do problema queBezerra


Byron Leite Dantas se quer resolver!
Exemplo

A Vértice inexplorado
A Vértice explorado
Aresta inexplorada
Aresta descoberta
Aresta de retorno

Byron Leite Dantas Bezerra


Exemplo (cont.)

Byron Leite Dantas Bezerra


Propriedades
 Todos os vértices contidos no componente
conexo que v pertence, serão explorados.
 Pode servir para identificar os sub-grafos de um
grafo!

 As arestas rotuladas como descobertas,


formam uma árvore de cobertura de G

 Para cada aresta de retorno de G temos um


ciclo associado
 Pode servir para identificar os ciclos de um grafo!

Byron Leite Dantas Bezerra


Busca em
Largura

Byron Leite Dantas Bezerra


Aplicações
 Encontrar um caminho de um vértice
a outro do grafo
 Determinar se um grafo é conexo
 Achar uma árvore de cobertura de
um grafo conexo
 Encontrar os ciclos simples de um
grafo
 Encontrar o menor caminho entre
dois pares de vértices

Byron Leite Dantas Bezerra


Analogia
 Procedimento semelhante ao
radar. Varredura por níveis.
 Primeiro caminhamos pelos
vértices do nível I para depois
caminharmos pelos vértices do
nível I+1.
 Mesma idéia do caminhamento em
largura de árvores

Byron Leite Dantas Bezerra


Algoritmo
 Entrada: um grafo G e um vértice v de G.
 Saída: depende do objetivo do caminhamento
Seja F uma fila inicialmente contendo v
Marque v como explorado
Enquanto F não for vazia faça
v <- início de F // remove o início da fila
Para cada aresta e=(v,w) faça
Se e for inexplorada então
Se w é inexplorado então
Rotule e como uma aresta de “descoberta”
Insira w no final de F
Marque w como explorado
Senão
Rotule e como uma aresta de “cruzamento”

Isso depende do problema queBezerra


Byron Leite Dantas se quer resolver!
Exemplo

A Vértice inexplorado
A Vértice explorado
Aresta inexplorada
Aresta descoberta
Aresta de cruzamento

Byron Leite Dantas Bezerra


Exemplo (cont.)

Byron Leite Dantas Bezerra


Exemplo (cont.)

Byron Leite Dantas Bezerra


Propriedades
 Todos os vértices contidos no componente
conexo que v pertence, serão explorados.
 Pode servir para identificar os sub-grafos de um
grafo!
 As arestas rotuladas como descobertas,
formam uma árvore de cobertura mínima
de G
 Para cada aresta de cruzamento de G temos
um ciclo associado
 Pode servir para identificar os ciclos de um grafo!
 O menor caminho entre v e qualquer outro
vértice w sempre será encontrado, caso
exista
Byron Leite Dantas Bezerra
Busca em
Profundidade
X
Busca em
Largura
Byron Leite Dantas Bezerra
Profundidade X Largura
Aplicações P L
Árvores de cobertura, componentes
conexos, caminhos, ciclos X X
Caminhos mais curtos X

Byron Leite Dantas Bezerra


Profundidade X Largura
 Aresta de Retorno  Aresta de
(v,w) Cruzamento (v,w)
 w é um ancestral de  w está no mesmo
v na árvore de nível que v ou um
cobertura nível a mais (na
árvore de cobertura)

Byron Leite Dantas Bezerra


Exercício (entrega
juntamente com o anterior)
 Implementar um método na classe
Grafo que deve retornar true caso o
mesmo possua ciclo e false caso
contrário, usando para isso o
algoritmo de busca em profundidade.
 Implementar um método na classe
Grafo que imprime o menor caminho
entre dois vértices dados como
entrada, usando para isso o
algoritmo de busca em largura.
Byron Leite Dantas Bezerra

Você também pode gostar