Académique Documents
Professionnel Documents
Culture Documents
Grafos
Grafos
www.pucsp.br/~jarakaki (jarakaki@pucsp.br)
© Julio Arakaki 1
Ciência da Computação
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
11
33
44
55
66
77
© Julio Arakaki 3
Ciência da Computação
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:
Outros:
• Buscas Gulosas (“Greedy Search”)
Escolhe-se as arestas que possuem menor custo, menor
caminho, etc...
• ...
© Julio Arakaki 5
Ciência da Computação
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
© 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)
Celia
Fila:
© Julio Arakaki 7
Ciência da Computação
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Célia
Fila:
André
© Julio Arakaki 8
Ciência da Computação
4
Grafos Busca em grafos
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Célia
Fila:
Boni Célia
© Julio Arakaki 9
Ciência da Computação
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Célia
Fila:
Célia Eliana
© Julio Arakaki 10
Ciência da Computação
5
Grafos Busca em grafos
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Célia
Fila:
Eliana Dilma
© Julio Arakaki 11
Ciência da Computação
Busca
Busca em
emLargura
Largura (BFS)
(BFS)
Célia
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
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
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
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
© 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
© Julio Arakaki 19
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
André
Célia
© 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
© Julio Arakaki 21
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
Eliana
Boni
Célia
André
© 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
© Julio Arakaki 23
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
Gilda
Dilma
Célia
Eliana
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
Boni
André
© Julio Arakaki 25
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
Gilda
Dilma
Célia
Eliana
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
© Julio Arakaki 27
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
F
Célia
Dilma
Célia
Eliana
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
© Julio Arakaki 29
Ciência da Computação
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Pilha
André Dilma Fábio
Eliana
Boni
Célia
André
© 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
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
Busca
Busca em
emProfundidade
Profundidade (DFS)
(DFS)
Caminho percorrido
Célia
© 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