Vous êtes sur la page 1sur 18

Grafos Busca em grafos

Grafos
Grafos

Prof. Dr. Julio Arakaki

www.pucsp.br/~jarakaki (jarakaki@pucsp.br)

Depto. Ciência da Computação

© Julio Arakaki 1
Ciência da Computação

Grafos Busca em grafos

Busca
Busca

d
e e
55 d
11

ed de
22 44

d
77 e

de
e
d 66
33

© Julio Arakaki 2
Ciência da Computação

1
Grafos Busca em grafos

Árvore
Árvore Geradora
Geradora

22 Árvore que alcança todos


os vértices

11
33
44

55
66

77

© Julio Arakaki 3
Ciência da Computação

Grafos Busca em grafos

Busca
Busca
Utilizando as arestas escolhidas na ordem da
busca, é possível montar uma árvore geradora
(árvore de Busca):
00
22 44 start

66 11 22

55 00
33 44 55
33

11 66

© Julio Arakaki 4
Ciência da Computação

2
Grafos Busca em grafos

Tipos
Tipos de
de Busca
Busca
Mais comuns são:

• Busca em Largura - BFS (“Breadth-First Search”)


Os vértices descobertos mais antigos são “analisados” primeiro
Escolhe-se as arestas que partem destes vértices

• Busca em Profundidade - DFS (“Depth-First Search”)


Os vértices descobertos mais recentes são “analisados” primeiro
Escolhe-se as arestas que partem destes vértices

Outros:
• Buscas Gulosas (“Greedy Search”)
Escolhe-se as arestas que possuem menor custo, menor
caminho, etc...
• ...

© Julio Arakaki 5
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

• Considerada também como uma busca por nível.


• Característica: visita primeiro todos os nós
próximos da raiz da busca (por níveis), antes de
visitar os mais distantes.
• A árvore geradora é uma árvore com menor
profundidade (mais larga) e com muitos filhos para
cada nó.
• Poderá ser implementada utilizando-se uma fila.

© Julio Arakaki 6
Ciência
© Copyright 2003 da Computação
Algoritmos e Estruturas de Dados - Todos os direitos reservados

3
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

Andre Dilma Fabio

Celia

Boni Eliana Gilda

Fila:

© Julio Arakaki 7
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André Dilma Fábio

Célia

Boni Eliana Gilda

Fila:

André

© Julio Arakaki 8
Ciência da Computação

4
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André Dilma Fábio

Célia

Boni Eliana Gilda

Fila:

Boni Célia

© Julio Arakaki 9
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André Dilma Fábio

Célia

Boni Eliana Gilda

Fila:

Célia Eliana

© Julio Arakaki 10
Ciência da Computação

5
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André Dilma Fábio

Célia

Boni Eliana Gilda

Fila:

Eliana Dilma

© Julio Arakaki 11
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André Dilma Fábio

Célia

Boni Eliana Gilda

Fila:

Dilma

© Julio Arakaki 12
Ciência da Computação

6
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André
A Dilma
D Fábio

Célia
C

Boni
B Eliana
E Gilda

Fila:

Fábio Gilda

© Julio Arakaki 13
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André
A Dilma
D Fábio
F

Célia
C

Boni
B Eliana
E Gilda

Fila:

Gilda

© Julio Arakaki 14
Ciência da Computação

7
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

André
A Dilma
D Fábio
F

Célia
C

Boni
B Eliana
E Gilda
G

Fila:

© Julio Arakaki 15
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)

Caminho percorrido

André
A Dilma
D Fábio
F

Célia
C

Boni
B Eliana
E Gilda
G

© Julio Arakaki 16
Ciência da Computação

8
Grafos Busca em grafos

Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Algoritmo bfs(inicio)
fila.inserir(inicio) %insere na fila
mark[inicio]←verdadeiro % marca nó inicial
enquanto (fila não vazia) faça
v←fila.remover
temp←adj[v].inicio
enquanto (temp ≠ nulo) faça
w←temp.vertice
se (w não está marcado) então
fila.inserir(w)
mark[w]← true % marca w como marcado
fim_se
temp←temp.próximo
fim_enquanto
fim_enquanto
fim_bfs

© Julio Arakaki 17
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

• Característica: inicia-se a partir de um nó raiz e


percorre cada caminho de forma a ir o mais longe
possível antes de passar para outro caminho.
• A árvore Geradora é uma árvore com maior
profundidade.
• Poderá ser implementada com uma pilha.

© Julio Arakaki 18
Ciência
© Copyright 2003 da Computação
Algoritmos e Estruturas de Dados - Todos os direitos reservados

9
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio

Célia

Boni Eliana Gilda

© Julio Arakaki 19
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
André

Célia

Boni Eliana Gilda

© Julio Arakaki 20
Ciência da Computação

10
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Boni

André Célia

Boni Eliana Gilda

© Julio Arakaki 21
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Eliana

Boni
Célia

André

Boni Eliana Gilda

© Julio Arakaki 22
Ciência da Computação

11
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Dilma

Eliana
Célia

Boni

Boni Eliana Gilda


André

© Julio Arakaki 23
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Gilda

Dilma
Célia

Eliana

Boni Boni Eliana Gilda

André

© Julio Arakaki 24
Ciência da Computação

12
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Fábio

Gilda
C

Dilma

Eliana Boni Eliana Gilda

Boni

André

© Julio Arakaki 25
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Gilda

Dilma
Célia

Eliana

Boni Boni Eliana Gilda

André

© Julio Arakaki 26
Ciência da Computação

13
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Dilma

Eliana
Célia

Boni

Boni Eliana Gilda


André

© Julio Arakaki 27
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
F
Célia

Dilma
Célia

Eliana

Boni Boni Eliana Gilda


G

André

© Julio Arakaki 28
Ciência da Computação

14
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
F
Dilma

Eliana
Célia
C

Boni

Boni Eliana Gilda


G
André

© Julio Arakaki 29
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma Fábio
Eliana

Boni
Célia

André

Boni Eliana Gilda

© Julio Arakaki 30
Ciência da Computação

15
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André Dilma
D Fábio
F
Boni

André
Célia
C

Boni Eliana
E Gilda
G

© Julio Arakaki 31
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
A
André D
Dilma F
Fábio
A
André

Célia
C

B
Boni E
Eliana G
Gilda

© Julio Arakaki 32
Ciência da Computação

16
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Pilha
André
A Dilma
D Fábio
F

Célia
C

Boni
B Eliana
E Gilda
G

© Julio Arakaki 33
Ciência da Computação

Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)

Caminho percorrido

André Dilma Fábio

Célia

Boni Eliana Gilda

© Julio Arakaki 34
Ciência da Computação

17
Grafos Busca em grafos

Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
função dfs(inicio)
dfsRec(inicio)
fim_função

Algoritmo dfsRec(v)
se (v está marcado) então
retorna
fim_se
mark[v]←verdadeiro % marca v
temp←adj[v].inicio % pega adjacente
enquanto (temp ≠ null) faça
dfsRec(temp.vertice)
temp←temp.próximo
fim_enquanto
fim_algoritmo
© Julio Arakaki 35
Ciência da Computação

18

Vous aimerez peut-être aussi