Escolar Documentos
Profissional Documentos
Cultura Documentos
Busca em Grafos
Prof. Tiago Eugenio de Melo
tmelo@uea.edu.br
www.tiagodemelo.info
Observações
●
As palavras com a fonte Courier indicam as
palavras-reservadas da linguagem de
programação.
2/183
Referências
●
Projetos de Algoritmos – com
implementações em Pascal e C. Nivio Ziviani.
2a edição. Thomson, 2005.
●
Material baseado nas notas de aula do
professor Marco Antônio Moreira de Carvalho.
Acessado em 14/10/2019:
http://www.decom.ufop.br/marco/ensino/bcc204/material-das-aulas
3/183
Introdução
Busca em Grafos
4/183
Busca em Grafos
5/183
Busca em Grafos
●
Definição
6/183
Busca em Grafos
●
Definição
– A busca em grafos (ou percurso em grafos) é a
examinação de vértices e arestas de um grafo.
7/183
Busca em Grafos
●
Definição
– A busca em grafos (ou percurso em grafos) é a
examinação de vértices e arestas de um grafo.
– O projeto de bons algoritmos para determinação de
estruturas ou propriedades de grafos depende
fortemente do domínio dessas técnicas.
8/183
Busca em Grafos
9/183
Busca em Grafos
●
Terminologia
10/183
Busca em Grafos
●
Terminologia
– Uma aresta ou um vértice ainda não examinados
são marcados como não explorados ou não
visitados.
11/183
Busca em Grafos
●
Terminologia
– Uma aresta ou um vértice ainda não examinados
são marcados como não explorados ou não
visitados.
– Inicialmente, todos os vértices e arestas são
marcados como não explorados.
12/183
Busca em Grafos
●
Terminologia
– Uma aresta ou um vértice ainda não examinados
são marcados como não explorados ou não
visitados.
– Inicialmente, todos os vértices e arestas são
marcados como não explorados.
– Após terem sido examinados, os mesmos são
marcados como explorados ou visitados.
13/183
Busca em Grafos
●
Terminologia
– Uma aresta ou um vértice ainda não examinados
são marcados como não explorados ou não
visitados.
– Inicialmente, todos os vértices e arestas são
marcados como não explorados.
– Após terem sido examinados, os mesmos são
marcados como explorados ou visitados.
– Ao final, todos os vértices e arestas são marcados
como explorados (no caso de uma busca
completa).
14/183
Busca Genérica
15/183
Atravessando Labirintos
16/183
Como escapar?
17/183
Como escapar?
●
Algoritmo de Trémaux (Século XIX)
18/183
Como escapar?
●
Algoritmo de Trémaux (Século XIX)
– Pierre Trémaux
19/183
Como escapar?
●
Algoritmo de Trémaux (Século XIX)
– Pierre Trémaux
– Arquiteto francês, fotógrafo e orientalista.
20/183
Como escapar?
●
Algoritmo de Trémaux (Século XIX)
– Pierre Trémaux
– Arquiteto francês, fotógrafo e orientalista.
– Autor de várias publicações científicas e
etnografias.
21/183
Como escapar?
22/183
Como escapar?
●
Algoritmo
23/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
24/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
– Ao chegar em uma junção não visitada (ou seja,
nenhuma linha), escolha a direção aleatória e
risque o caminho.
25/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
– Ao chegar em uma junção não visitada (ou seja,
nenhuma linha), escolha a direção aleatória e
risque o caminho.
– Ao chegar em uma junção já marcada, vire-se e
caminhe de volta, marcando o caminho pela
segunda vez.
26/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
– Ao chegar em uma junção não visitada (ou seja,
nenhuma linha), escolha a direção aleatória e
risque o caminho.
– Ao chegar em uma junção já marcada, vire-se e
caminhe de volta, marcando o caminho pela
segunda vez.
– Se este não for o caso, escolha o caminho com
menos linhas e marque-o novamente.
27/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
– Ao chegar em uma junção não visitada (ou seja, nenhuma
linha), escolha a direção aleatória e risque o caminho.
– Ao chegar em uma junção já marcada, vire-se e caminhe
de volta, marcando o caminho pela segunda vez.
– Se este não for o caso, escolha o caminho com menos
linhas e marque-o novamente.
– Quando finalmente chegar à saída do labirinto, os
caminhos marcados com apenas uma linha indicarão o
caminho direto até o ponto inicial.
28/183
Como escapar?
●
Algoritmo
– Inicialmente, uma direção aleatória é escolhida.
– Ao chegar em uma junção não visitada (ou seja, nenhuma
linha), escolha a direção aleatória e risque o caminho.
– Ao chegar em uma junção já marcada, vire-se e caminhe de
volta, marcando o caminho pela segunda vez.
– Se este não for o caso, escolha o caminho com menos linhas
e marque-o novamente.
– Quando finalmente chegar à saída do labirinto, os caminhos
marcados com apenas uma linha indicarão o caminho direto
até o ponto inicial.
– Se não houver saída, você voltará ao ponto inicial, no qual
todos os caminhos possuem duas linhas.
29/183
Atravessando Labirintos
30/183
Atravessando Labirintos
31/183
Atravessando Labirintos
32/183
Atravessando Labirintos
33/183
Atravessando Labirintos
34/183
Atravessando Labirintos
35/183
Atravessando Labirintos
●
Ideia
36/183
Atravessando Labirintos
●
Ideia
– Uma forma de encontrar a saída do labirinto sem
nunca percorrer mais de uma vez o mesmo
caminho consiste em realizar uma busca no grafo
de modo a nunca repetir arestas, marcando-as.
37/183
Atravessando Labirintos
●
Ideia
– Uma forma de encontrar a saída do labirinto sem
nunca percorrer mais de uma vez o mesmo
caminho consiste em realizar uma busca no grafo
de modo a nunca repetir arestas, marcando-as.
– A busca se inicia no vértice que representa a
entrada e termina no vértice que representa a
saída.
38/183
Atravessando Labirintos
39/183
Atravessando Labirintos
40/183
Atravessando Labirintos
41/183
Busca em Grafos
42/183
Busca em Grafos
43/183
Busca em Grafos
●
Dependendo do critério utilizado para a escolha
dos vértices e arestas a serem visitados,
diferentes tipos de buscas são desenvolvidos a
partir da busca genérica.
44/183
Busca em Grafos
●
Dependendo do critério utilizado para a escolha
dos vértices e arestas a serem visitados,
diferentes tipos de buscas são desenvolvidos a
partir da busca genérica.
●
Basicamente, duas buscas completas em
grafos são essenciais:
45/183
Busca em Grafos
●
Dependendo do critério utilizado para a escolha
dos vértices e arestas a serem visitados,
diferentes tipos de buscas são desenvolvidos a
partir da busca genérica.
●
Basicamente, duas buscas completas em
grafos são essenciais:
– Busca em profundidade (ou DFS – Depth-First
Search);
46/183
Busca em Grafos
●
Dependendo do critério utilizado para a escolha
dos vértices e arestas a serem visitados,
diferentes tipos de buscas são desenvolvidos a
partir da busca genérica.
●
Basicamente, duas buscas completas em
grafos são essenciais:
– Busca em profundidade (ou DFS – Depth-First
Search);
– Busca em largura (ou BFS – Breadth-First Search).
47/183
DFS versus BFS
48/183
DFS versus BFS
49/183
DFS versus BFS
50/183
Busca em Profundidade (DFS)
51/183
Busca em Profundidade (DFS)
●
Características
52/183
Busca em Profundidade (DFS)
●
Características
– A busca em profundidade visita todos os vértices
de um grafo, usando como critério os vizinhos do
vértice visitado mais recentemente.
53/183
Busca em Profundidade (DFS)
●
Características
– A busca em profundidade visita todos os vértices
de um grafo, usando como critério os vizinhos do
vértice visitado mais recentemente.
– Principal característica:
54/183
Busca em Profundidade (DFS)
●
Características
– A busca em profundidade visita todos os vértices
de um grafo, usando como critério os vizinhos do
vértice visitado mais recentemente.
– Principal característica:
●
Utiliza uma pilha explícita ou recursividade para guiar
a busca.
55/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
56/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
57/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
58/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
59/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
60/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
61/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
62/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
63/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
64/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
65/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
66/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
67/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
68/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
69/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
70/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
71/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
72/183
Busca em Profundidade (DFS)
●
Exemplo de uso de pilha:
73/183
Busca em Profundidade (DFS)
74/183
Busca em Profundidade (DFS)
75/183
Busca em Profundidade (DFS)
●
Classificação de arestas
76/183
Busca em Profundidade (DFS)
●
Classificação de arestas
– Ao explorar um grafo G conexo usando a DFS,
podemos categorizar as arestas:
77/183
Busca em Profundidade (DFS)
●
Classificação de arestas
– Ao explorar um grafo G conexo usando a DFS,
podemos categorizar as arestas:
●
Arestas de árvore: satisfazem ao primeiro se do
algoritmo (linha 3), ou seja, levam à visitação de vértices
ainda não visitados.
78/183
Busca em Profundidade (DFS)
●
Classificação de arestas
– Ao explorar um grafo G conexo usando a DFS,
podemos categorizar as arestas:
●
Arestas de árvore: satisfazem ao primeiro se do
algoritmo (linha 3), ou seja, levam à visitação de vértices
ainda não visitados.
●
Arestas de retorno: demais arestas. Formam ciclos, pois
levam a vértices já visitados.
79/183
Busca em Profundidade (DFS)
●
Classificação de arestas
– Ao explorar um grafo G conexo usando a DFS,
podemos categorizar as arestas:
●
Arestas de árvore: satisfazem ao primeiro se do
algoritmo (linha 3), ou seja, levam à visitação de vértices
ainda não visitados.
●
Arestas de retorno: demais arestas. Formam ciclos, pois
levam a vértices já visitados.
– Árvore de profundidade
80/183
Busca em Profundidade (DFS)
●
Classificação de arestas
– Ao explorar um grafo G conexo usando a DFS,
podemos categorizar as arestas:
●
Arestas de árvore: satisfazem ao primeiro se do
algoritmo (linha 3), ou seja, levam à visitação de vértices
ainda não visitados.
●
Arestas de retorno: demais arestas. Formam ciclos, pois
levam a vértices já visitados.
– Árvore de profundidade
●
A subárvore G formada pelas arestas de árvore é
chamada de Árvore de Profundidade G.
81/183
DFS - Exemplo
82/183
DFS - Exemplo
83/183
DFS - Exemplo
84/183
DFS - Exemplo
85/183
DFS - Exemplo
86/183
DFS - Exemplo
87/183
DFS - Exemplo
88/183
DFS - Exemplo
89/183
DFS - Exemplo
90/183
DFS - Exemplo
91/183
DFS
92/183
DFS
●
Complexidade
93/183
DFS
●
Complexidade
– Para cada vértice do grafo, a DFS percorre todos
os seus vizinhos.
94/183
DFS
●
Complexidade
– Para cada vértice do grafo, a DFS percorre todos
os seus vizinhos.
– Cada aresta é visitada duas vezes.
95/183
DFS
●
Complexidade
– Para cada vértice do grafo, a DFS percorre todos
os seus vizinhos.
– Cada aresta é visitada duas vezes.
– Se apresentarmos o grafo por uma lista de
adjacências, a DFS tem complexidade O(|V| + |E|).
96/183
DFS – Grafos Direcionados
97/183
DFS – Grafos Direcionados
●
A aplicação da DFS em grafos direcionados é
essencialmente igual à aplicação em grafos
não direcionados.
98/183
DFS – Grafos Direcionados
●
A aplicação da DFS em grafos direcionados é
essencialmente igual à aplicação em grafos
não direcionados.
●
No entanto, mesmo o grafo direcionado sendo
conexo, a DFS pode precisar ser chamada
repetidas vezes enquanto houver vértices não
visitados, retornando uma floresta.
99/183
DFS – Grafos Direcionados
●
A aplicação da DFS em grafos direcionados é
essencialmente igual à aplicação em grafos não
direcionados.
●
No entanto, mesmo o grafo direcionado sendo
conexo, a DFS pode precisar ser chamada
repetidas vezes enquanto houver vértices não
visitados, retornando uma floresta.
●
Este é o mesmo caso quando a DFS é aplicada
a um GND desconexo.
100/183
Busca em Profundidade - Reinício
101/183
Busca em Profundidade
102/183
Busca em Profundidade
●
Classificação de arestas
103/183
Busca em Profundidade
●
Classificação de arestas
– Ao explorar um grafo G direcionado usando a DFS,
podemos categorizar as arestas.
104/183
Busca em Profundidade
●
Classificação de arestas
– Ao explorar um grafo G direcionado usando a DFS,
podemos categorizar as arestas.
– Sejam o vértice v a origem da aresta e o vértice w o
destino da mesma:
105/183
Busca em Profundidade
●
Classificação de arestas
– Ao explorar um grafo G direcionado usando a DFS,
podemos categorizar as arestas.
– Sejam o vértice v a origem da aresta e o vértice w o
destino da mesma:
●
Arcos de avanço
106/183
Busca em Profundidade
●
Classificação de arestas
– Ao explorar um grafo G direcionado usando a DFS,
podemos categorizar as arestas.
– Sejam o vértice v a origem da aresta e o vértice w o
destino da mesma:
●
Arcos de avanço
●
Arcos de retorno
107/183
Busca em Profundidade
●
Classificação de arestas
– Ao explorar um grafo G direcionado usando a DFS,
podemos categorizar as arestas.
– Sejam o vértice v a origem da aresta e o vértice w o
destino da mesma:
●
Arcos de avanço
●
Arcos de retorno
●
Arcos de cruzamento
108/183
Busca em Profundidade
109/183
Busca em Profundidade
●
Classificação de arestas
110/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
111/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
112/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
113/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
●
Caso v seja descendente de w na floresta.
114/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
●
Caso v seja descendente de w na floresta.
●
Ou, w é ancestral de v.
115/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
●
Caso v seja descendente de w na floresta.
●
Ou, w é ancestral de v.
– Arcos de cruzamento (cruzado)
116/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
●
Caso v seja descendente de w na floresta.
●
Ou, w é ancestral de v.
– Arcos de cruzamento (cruzado)
●
Caso w não seja descendente de v e v não seja
descendente de w.
117/183
Busca em Profundidade
●
Classificação de arestas
– Arcos de avanço
●
Caso w seja descendente de v na floresta.
– Arcos de retorno
●
Caso v seja descendente de w na floresta.
●
Ou, w é ancestral de v.
– Arcos de cruzamento (cruzado)
●
Caso w não seja descendente de v e v não seja
descendente de w.
●
Ou, w é primo de v.
118/183
Busca em Profundidade
119/183
Busca em Profundidade
●
Exemplo
120/183
Busca em Profundidade
●
Exemplo
121/183
Busca em Profundidade
●
Exemplo
Arcos da floresta são vermelhos.
122/183
Busca em Profundidade
●
Exemplo
Arcos da floresta são vermelhos.
Arcos de retorno são verdes.
123/183
Busca em Profundidade
●
Exemplo
Arcos da floresta são vermelhos.
Arcos de retorno são verdes.
Arcos de avanço são roxos.
124/183
Busca em Profundidade
●
Exemplo
Arcos da floresta são vermelhos.
Arcos de retorno são verdes.
Arcos de avanço são roxos.
Arcos cruzados são azuis.
125/183
DFS - Exemplo
126/183
DFS - Exemplo
127/183
DFS - Exemplo
128/183
DFS - Exemplo
129/183
DFS - Exemplo
130/183
DFS - Exemplo
131/183
DFS - Exemplo
132/183
DFS - Exemplo
133/183
DFS - Exemplo
134/183
DFS - Exemplo
135/183
Exemplo
●
https://www.cs.usfca.edu/~galles/visualization/DFS.html
136/183
Busca em Largura
137/183
Busca em Largura
138/183
Busca em Largura
●
Características
139/183
Busca em Largura
●
Características
– A busca em largura visita todos os vértices de um
grafo, usando como critério o vértice visitado
menos recentemente e cuja vizinhança ainda não
foi explorada.
140/183
Busca em Largura
●
Características
– A busca em largura visita todos os vértices de um
grafo, usando como critério o vértice visitado
menos recentemente e cuja vizinhança ainda não
foi explorada.
– Característica principal: utiliza uma fila para guiar a
busca.
141/183
Busca em Largura
142/183
Busca em Largura
●
Atuação em camadas
143/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com
distância 0 (zero) do vértice inicial.
144/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com
distância 0 (zero) do vértice inicial.
– Na iteração 1 são visitados os vértices com
distância 1; prosseguindo, de modo genérico, na
iteração d será adicionada uma camada com todos
os vértices com distância d do vértice inicial.
145/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com
distância 0 (zero) do vértice inicial.
– Na iteração 1 são visitados os vértices com
distância 1; prosseguindo, de modo genérico, na
iteração d será adicionada uma camada com todos
os vértices com distância d do vértice inicial.
– Cada novo vértice visitado é adicionado no final de
uma fila Q.
146/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com
distância 0 (zero) do vértice inicial.
– Na iteração 1 são visitados os vértices com
distância 1; prosseguindo, de modo genérico, na
iteração d será adicionada uma camada com todos
os vértices com distância d do vértice inicial.
– Cada novo vértice visitado é adicionado no final de
uma fila Q.
– Cada vértice da fila é removido depois que toda a
vizinhança for visitada.
147/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com distância 0
(zero) do vértice inicial.
– Na iteração 1 são visitados os vértices com distância 1;
prosseguindo, de modo genérico, na iteração d será
adicionada uma camada com todos os vértices com distância
d do vértice inicial.
– Cada novo vértice visitado é adicionado no final de uma fila
Q.
– Cada vértice da fila é removido depois que toda a vizinhança
for visitada.
– Cada vértice da fila é removido depois que toda a vizinhança
for visitada.
148/183
Busca em Largura
●
Atuação em camadas
– Inicialmente são considerados os vértices com distância 0
(zero) do vértice inicial.
– Na iteração 1 são visitados os vértices com distância 1;
prosseguindo, de modo genérico, na iteração d será
adicionada uma camada com todos os vértices com distância
d do vértice inicial.
– Cada novo vértice visitado é adicionado no final de uma fila Q.
– Cada vértice da fila é removido depois que toda a vizinhança
for visitada.
– Cada vértice da fila é removido depois que toda a vizinhança
for visitada.
– A busca termina quando a fila se torna vazia.
149/183
Busca em Largura - BFS
150/183
Busca em Largura - BFS
151/183
Busca em Largura - BFS
152/183
Busca em Largura - BFS
153/183
Busca em Largura - BFS
154/183
Busca em Largura - BFS
155/183
Busca em Largura - BFS
156/183
Busca em Largura - BFS
157/183
Busca em Largura - BFS
158/183
Busca em Largura - BFS
159/183
Busca em Largura - BFS
160/183
Busca em Largura - BFS
161/183
Busca em Largura - BFS
●
Complexidade
162/183
Busca em Largura - BFS
●
Complexidade
– Cada vértice só entra na fila uma vez.
163/183
Busca em Largura - BFS
●
Complexidade
– Cada vértice só entra na fila uma vez.
– Inserir e remover na fila possuem complexidade
constante, realizadas |V| vezes cada.
164/183
Busca em Largura - BFS
●
Complexidade
– Cada vértice só entra na fila uma vez.
– Inserir e remover na fila possuem complexidade
constante, realizadas |V| vezes cada.
– A lista de adjacências de cada vértice é examinada
apenas uma vez, e a soma dos comprimentos de
todas as listas é Ө(m).
165/183
Busca em Largura - BFS
●
Complexidade
– Cada vértice só entra na fila uma vez.
– Inserir e remover na fila possuem complexidade
constante, realizadas |V| vezes cada.
– A lista de adjacências de cada vértice é examinada
apenas uma vez, e a soma dos comprimentos de todas
as listas é Ө(m).
– Logo, se representarmos o grafo por uma lista de
adjacências, a busca em largura (BFS) tem
complexidade O(n+m).
166/183
Exemplo
https://www.cs.usfca.edu/~galles/visualization/BFS.html
167/183
DFS x BFS
168/183
DFS x BFS
●
DFS – Busca em Profundidade
169/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente
quando não existem mais vértices desconhecidos
pela frente.
170/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente
quando não existem mais vértices desconhecidos
pela frente.
– Marca o vértice antes de visitar toda sua
vizinhança.
171/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente
quando não existem mais vértices desconhecidos
pela frente.
– Marca o vértice antes de visitar toda sua
vizinhança.
– Uso de pilha.
172/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente
quando não existem mais vértices desconhecidos
pela frente.
– Marca o vértice antes de visitar toda sua
vizinhança.
– Uso de pilha.
●
BFS – Busca em Largura
173/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente quando
não existem mais vértices desconhecidos pela frente.
– Marca o vértice antes de visitar toda sua vizinhança.
– Uso de pilha.
●
BFS – Busca em Largura
– Busca progride em largura: certifica-se de que vizinhos
próximos sejam visitados primeiramente.
174/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente quando
não existem mais vértices desconhecidos pela frente.
– Marca o vértice antes de visitar toda sua vizinhança.
– Uso de pilha.
●
BFS – Busca em Largura
– Busca progride em largura: certifica-se de que vizinhos
próximos sejam visitados primeiramente.
– Marca o vértice depois de visitar toda a sua vizinhança.
175/183
DFS x BFS
●
DFS – Busca em Profundidade
– Incursão profundas no grafo, voltando somente quando não
existem mais vértices desconhecidos pela frente.
– Marca o vértice antes de visitar toda sua vizinhança.
– Uso de pilha.
●
BFS – Busca em Largura
– Busca progride em largura: certifica-se de que vizinhos
próximos sejam visitados primeiramente.
– Marca o vértice depois de visitar toda a sua vizinhança.
– Uso de fila.
176/183
Aplicações
177/183
Aplicações
●
Detectar grafos desconectados.
178/183
Aplicações
●
Detectar grafos desconectados.
●
Detectar se o grafo possui ciclos.
179/183
Aplicações
●
Detectar grafos desconectados.
●
Detectar se o grafo possui ciclos.
●
Encontrar componentes biconexas.
180/183
Aplicações
●
Detectar grafos desconectados.
●
Detectar se o grafo possui ciclos.
●
Encontrar componentes biconexas.
●
Classificar arestas.
181/183
Aplicações
●
Detectar grafos desconectados.
●
Detectar se o grafo possui ciclos.
●
Encontrar componentes biconexas.
●
Classificar arestas.
●
Encontrar componentes fortemente conexas.
182/183
Aplicações
●
Detectar grafos desconectados.
●
Detectar se o grafo possui ciclos.
●
Encontrar componentes biconexas.
●
Classificar arestas.
●
Encontrar componentes fortemente conexas.
●
Determinar o menor caminho em grafos não
ponderados.
183/183