Upload
internet
View
109
Download
3
Embed Size (px)
Citation preview
CAMINHOS E CAMINHAMENTOS EM GRAFOSLeandro Guarino de Vasconcelos
CAMINHAMENTO EM GRAFOS
Caminhar (ou percorrer) um grafo consiste em visitar todos os seus vértices atravessando todas as suas arestas
O caminhamento pode ocorrer utilizando busca em profundidade ou busca em largura
A representação por lista de adjacências facilita o processo de caminhamento em grafos
BUSCA EM PROFUNDIDADE Enquanto for possível, aprofundar-se no grafo. Quando não for
mais possível, recuar até que seja possível continuar a aprofundar-se.
A ordem em que os nós e arestas são visitados depende Do vértice inicial Da ordem em que os vértices e arestas aparecem na lista de
adjacências
8
9
1
5
4
2
6
3
7
101
46
7
8
32
10
5
9
11ºº
22ºº
33ºº
44ºº
55ºº
66ºº
77ºº 88
ºº
99ºº
10º10º
BUSCA EM PROFUNDIDADE
Esse processo de busca pode ser representado por meio de uma árvore binária
8
9
1
5
4
2
6
3
7
101
46
7
8
32
10
5
9
11ºº
22ºº
33ºº
44ºº
55ºº
66ºº
77ºº 88
ºº
99ºº
10º10º
1
4
6 5
7
8 3
2 10
9
BUSCA EM PROFUNDIDADE Caminhamento na lista de adjacências A árvore de busca em profundidade é gerada através de uma pilha
D
A
E
B C
F G
H
A
B
C
D
E
F
G
H
B C
A
B H
F G
A D E
B H
C H
C H
D E F G
11A
D E
B C
F G
H
22
33
44
55 66
77
88 X
X
X
X
X
X
XX
não visitado
visitado
ALGORITMO DE BUSCA EM PROFUNDIDADEProcedimento BUSCA-PROF Para i = 1,...,n faça visitado(i) não fim-para Para i = 1,...,n faça Se visitado(i) = não então PROF(i) fim-paraFim Procedimento PROF(nó v)
visitado(v) sim Para cada nó w adjacente a v faça Se visitado(w) = não então PROF(w) fim-paraFim
Procedimento PROF(nó v) visitado(v) sim Para cada nó w adjacente a v faça Se visitado(w) = não então PROF(w) fim-paraFim
BUSCA EM LARGURA
Enquanto for possível, examinar todos os nós à mesma distância do nó inicial. Quando não for mais possível, aprofundar.
Usa uma fila ao invés de uma pilha no processo de caminhamento
8
9
1
5
4
2
6
3
7
101
46
7
8
32
10
5
9
11
44
77
1010
88
665599
33
22
BUSCA EM PROFUNDIDADE X BUSCA EM LARGURA
D
A
E
BC
F G
B C
A
F
G
D
E
Árvore de busca em Árvore de busca em profundidadeprofundidade
(pilha)(pilha)
Árvore de busca em Árvore de busca em profundidadeprofundidade
(pilha)(pilha)
D E
A
F G
CB
Árvore de busca em larguraÁrvore de busca em largura
(fila)(fila)
Árvore de busca em larguraÁrvore de busca em largura
(fila)(fila)
BUSCA EM LARGURA
Caminhamento na lista de adjacências
D
A
E
B C
F G
H
A
B
C
D
E
F
G
H
B C
A
B H
F G
A D E
B H
C H
C H
D E F G
11A
D E
B C
F G
H
22
44
88
55 66
33
77
não visitado
visitado
FilaFila
AA
ww = =
BB
A A
BBCC
B B
CCDD CCDDEE
C C
DDEEFF DDEEFFGG
D D
EEFFGGHH
E E F F G G H H
ALGORITMO DE BUSCA EM LARGURA
Procedimento BUSCA-AMPL(v) visitado(v) sim Colocar v em uma fila Enquanto fila não vazia faça w retirar o elemento da frente da fila Para cada vértice i adjacente a w faça Se visitado(i) = não então visitado(i) sim Colocar i no final da fila fim-se fim-para fim-enquantoFim
APLICAÇÕES A solução de certos problemas não requerem
que se encontre um caminho qualquer, mas um caminho específico Exemplo: caminho mínimo
Usando busca em largura obtemos o menor caminho em termos do número de arestas percorridas
Mas se tivermos pesos associados a arestas, a busca em largura não resolve
ARESTAS VALORADAS
Na solução de diversos problemas, temos a associação de pesos, custos ou distâncias a cada aresta de um grafo
Caminho mais curto Caminho mais rápido Caminho mais barato etc.
EXERCÍCIO 1
Lista de adjacências
1 2, 72 3, 1, 83 2, 44 3, 5, 95 4, 9, 6, 76 5, 87 1, 58 2, 6, 99 4, 5, 8
1 2
4
7
6
3
8
59
Vértice inicial
EXERCÍCIO 2
Lista de adjacências
1 2, 3, 42 1, 43 1, 44 2, 1, 3, 5, 6, 75 46 4, 87 4, 88 6, 7
1 2
4
63
7
5
8
Vértice inicial