Busca em Grafostiagodemelo.info/wp-content/uploads/2019/11/grafos-busca.pdf · 2019-11-13 · Busca...

Post on 27-Feb-2020

0 views 0 download

Transcript of Busca em Grafostiagodemelo.info/wp-content/uploads/2019/11/grafos-busca.pdf · 2019-11-13 · Busca...

Algoritmos e Estruturas de Dados II

Busca em GrafosProf. Tiago Eugenio de Melo

tmelo@uea.edu.br

www.tiagodemelo.info

2/183

Observações

● As palavras com a fonte Courier indicam as palavras-reservadas da linguagem de programação.

3/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

4/183

IntroduçãoBusca em Grafos

5/183

Busca em Grafos

6/183

Busca em Grafos

● Definição

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.

8/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.

9/183

Busca em Grafos

10/183

Busca em Grafos

● Terminologia

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.

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.

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.

14/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).

15/183

Busca Genérica

16/183

Atravessando Labirintos

17/183

Como escapar?

18/183

Como escapar?

● Algoritmo de Trémaux (Século XIX)

19/183

Como escapar?

● Algoritmo de Trémaux (Século XIX)– Pierre Trémaux

20/183

Como escapar?

● Algoritmo de Trémaux (Século XIX)– Pierre Trémaux– Arquiteto francês, fotógrafo e orientalista.

21/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.

22/183

Como escapar?

23/183

Como escapar?

● Algoritmo

24/183

Como escapar?

● Algoritmo– Inicialmente, uma direção aleatória é escolhida.

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.

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.

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.

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.

29/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.

30/183

Atravessando Labirintos

31/183

Atravessando Labirintos

32/183

Atravessando Labirintos

33/183

Atravessando Labirintos

34/183

Atravessando Labirintos

35/183

Atravessando Labirintos

36/183

Atravessando Labirintos

● Ideia

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.

38/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.

39/183

Atravessando Labirintos

40/183

Atravessando Labirintos

41/183

Atravessando Labirintos

42/183

Busca em Grafos

43/183

Busca em Grafos

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.

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:

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);

47/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).

48/183

DFS versus BFS

49/183

DFS versus BFS

50/183

DFS versus BFS

51/183

Busca em Profundidade (DFS)

52/183

Busca em Profundidade (DFS)

● Características

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.

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:

55/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.

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)

● Exemplo de uso de pilha:

74/183

Busca em Profundidade (DFS)

75/183

Busca em Profundidade (DFS)

76/183

Busca em Profundidade (DFS)

● Classificação de arestas

77/183

Busca em Profundidade (DFS)

● Classificação de arestas– Ao explorar um grafo G conexo usando a DFS,

podemos categorizar as arestas:

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.

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.

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

81/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.

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 - Exemplo

92/183

DFS

93/183

DFS

● Complexidade

94/183

DFS

● Complexidade– Para cada vértice do grafo, a DFS percorre todos

os seus vizinhos.

95/183

DFS

● Complexidade– Para cada vértice do grafo, a DFS percorre todos

os seus vizinhos.– Cada aresta é visitada duas vezes.

96/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|).

97/183

DFS – Grafos Direcionados

98/183

DFS – Grafos Direcionados

● A aplicação da DFS em grafos direcionados é essencialmente igual à aplicação em grafos não direcionados.

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.

100/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.

101/183

Busca em Profundidade - Reinício

102/183

Busca em Profundidade

103/183

Busca em Profundidade

● Classificação de arestas

104/183

Busca em Profundidade

● Classificação de arestas– Ao explorar um grafo G direcionado usando a DFS,

podemos categorizar as arestas.

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:

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

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

108/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

109/183

Busca em Profundidade

110/183

Busca em Profundidade

● Classificação de arestas

111/183

Busca em Profundidade

● Classificação de arestas– Arcos de avanço

112/183

Busca em Profundidade

● Classificação de arestas– Arcos de avanço

● Caso w seja descendente de v na floresta.

113/183

Busca em Profundidade

● Classificação de arestas– Arcos de avanço

● Caso w seja descendente de v na floresta.

– Arcos de retorno

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.

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.

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)

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.

118/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.

119/183

Busca em Profundidade

120/183

Busca em Profundidade

● Exemplo

121/183

Busca em Profundidade

● Exemplo

122/183

Busca em Profundidade

● ExemploArcos da floresta são vermelhos.

123/183

Busca em Profundidade

● ExemploArcos da floresta são vermelhos.

Arcos de retorno são verdes.

124/183

Busca em Profundidade

● ExemploArcos da floresta são vermelhos.

Arcos de retorno são verdes.

Arcos de avanço são roxos.

125/183

Busca em Profundidade

● ExemploArcos da floresta são vermelhos.

Arcos de retorno são verdes.

Arcos de avanço são roxos.

Arcos cruzados são azuis.

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

DFS - Exemplo

136/183

Exemplo

● https://www.cs.usfca.edu/~galles/visualization/DFS.html

137/183

Busca em Largura

138/183

Busca em Largura

139/183

Busca em Largura

● Características

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.

141/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.

142/183

Busca em Largura

143/183

Busca em Largura

● Atuação em camadas

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.

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.

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.

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.

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.

149/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.

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

162/183

Busca em Largura - BFS

● Complexidade

163/183

Busca em Largura - BFS

● Complexidade– Cada vértice só entra na fila uma vez.

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.

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).

166/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).

167/183

Exemplo

https://www.cs.usfca.edu/~galles/visualization/BFS.html

168/183

DFS x BFS

169/183

DFS x BFS

● DFS – Busca em Profundidade

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.

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.

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.

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

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.

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.

176/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.

177/183

Aplicações

178/183

Aplicações

● Detectar grafos desconectados.

179/183

Aplicações

● Detectar grafos desconectados.● Detectar se o grafo possui ciclos.

180/183

Aplicações

● Detectar grafos desconectados.● Detectar se o grafo possui ciclos.● Encontrar componentes biconexas.

181/183

Aplicações

● Detectar grafos desconectados.● Detectar se o grafo possui ciclos.● Encontrar componentes biconexas.● Classificar arestas.

182/183

Aplicações

● Detectar grafos desconectados.● Detectar se o grafo possui ciclos.● Encontrar componentes biconexas.● Classificar arestas.● Encontrar componentes fortemente conexas.

183/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.