Você está na página 1de 183

Algoritmos e Estruturas de Dados II

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

Você também pode gostar