76
BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

BCC402 Algoritmos e Programação AvançadaProf. Marco Antonio M. CarvalhoProf. Túlio Ângelo M. Toffolo2011/1

Page 2: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

2

Na aula anterior

• Estruturas de Dados– Pilhas;– Listas;– Filas

• Filas de Prioridades.

– Dicionários.

Page 3: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

3

Na aula de hoje

• Definições e Estruturas de Grafos• Busca em Largura;• Busca em Profundidade.

Page 4: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

4

Grafos

• Grafos são estruturas de dados muito importantes e recorrentes – Representam arbitrárias relações entre

elementos.

• O primeiro registro de uso data de 1736, por Euler– O problema era encontrar um caminho circular

por Königsberg (atual Kaliningrado) usando cada uma das pontes sobre o rio Pregel (ou Pregolya, Pregola) exatamente uma vez.

Page 5: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

5

Grafos

• Infelizmente (?), este problema não tem solução;• Por outro lado, a teoria de grafos foi desenvolvida.

Page 6: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

6

Grafos- Aplicações

• Grafos podem ser utilizados para modelar:– Malhas viárias;– Dutos (oleodutos, gasodutos, etc.);– Circuitos eletrônicos;– Redes (elétricas, de computadores, etc.);– Programas;– Interações humanas;– Enfim, inúmeras situações.

Page 7: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

7

Grafos - Definições

• Um grafo G é um par G=(V, E) consistindo de um conjunto não vazio V e um conjunto E de pares de elementos contidos em V– Os elementos de V são os vértices ou nós;– Os elementos de E são as arestas entre vértices, e

podem ter pesos, ou valores associados.

1

3

24

Vértice

Aresta

Page 8: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

8

Grafos - Definições

• Se existe uma aresta e entre os vértices u e v– Usamos a notação e = (u, v);– Os vértices são ditos vizinhos ou adjacentes;– A aresta e é dita incidente a u e v;

• O grau de um vértice u, denotado por d(u), é o número de arestas incidentes a u.

Page 9: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

9

Arestas Especiais

• Se em e =(u, v), u e v são o mesmo vértice, a aresta e éum laço ou loop;

• Em alguns casos, entre o mesmo par de vértices pode haver mais de uma aresta. Neste caso, elas são paralelas ou múltiplas.

1

2

3

Page 10: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

10

[Grafos]Simples vs. Não Simples

• Um grafo sem arestas múltiplas, ou loops é dito simples;

• Um grafo com este tipo de arestas é dito não simples– Pode ser utilizado para representar situações em

que dois elementos são ligados por mais que um meio

• Diferentes estradas entre duas cidades;• Ou diferentes dutos entre dois pontos.

• Algoritmos diferenciados para percurso em cadaum dos tipos de grafos.

Page 11: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

11

Grafos Orientados

• Em um grafo orientado, ou dígrafo, as arestas possuem uma orientação definida– O termo arco também é utilizado para se referir a este tipo

de aresta;– Ao invés de denotarmos e=(u, v), denotamos e=uv

indicando os vértices inicial e final;

1

2 3

4

5

Page 12: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

12

[Grafos]Orientados vs. Não Orientados

• Grafos direcionados podem ser utilizados para modelar ruas de cidades, pois (geralmente) são de mão única;

• Em um grafo não orientado, as arestas podem ser consideradas em qualquer direção– Por exemplo, modelam estradas, que usualmente

são de mão dupla;

Page 13: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

13

Grafos Ponderados

• Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados– Representam situações em que haja distância, tempo,

fluxo ou capacidade.

Ouro

Preto

Belo

Horizonte

115

Mariana

18

Congonhas55

68

92

157

Page 14: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

14

[Grafos]Ponderados vs. Não Ponderados

• A noção de valores em arestas introduz o conceito de menor caminho entre vértices– Para grafos não ponderados, o menor caminho

é aquele com menos arestas, uma vez que todastêm o mesmo peso (considerado unitário);

– Para grafos ponderados, algoritmos maiselaborados são necessários, uma vez que hádiversas combinações de arestas com pesos diferentes.

Page 15: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

15

Caminhos

• Um caminho em um grafo é uma sequência de vértices conectados entre si, formando um percurso em um grafo.– O caminho é delimitado por um vértice inicial e um vértice

final;– Em um caminho simples, cada vértice aparece uma única vez;– O comprimento de um caminho é a sua quantidade de vértices.

• Este exemplo de caminho é denotado por 1→2→4→3→5

Vértice Inicial

Vértice Final

Page 16: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

16

Ciclos

• Um ciclo ou circuito é um caminho em que o vértice inicial também é o vértice final– A escolha do vértice inicial é arbitrária.– Um grafo com ciclos é chamado cíclico;

• Este exemplo de ciclo pode ser denotado por 1→2→4→3→5→1.

Page 17: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

17

[Grafos] Cíclicos vs. Acíclicos

• Um grafo acíclico não possui ciclos– Árvores são grafos acíclicos não orientados;– Grafos orientados acíclicos (DAGs) são

utilizados para modelar precedência entre eventos ou elementos

• Ordenação topológica.

Page 18: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

18

Densidade

• Um grafo G=(V, E) em que |E| é muito menor que |V|2 é considerado esparso;

• Simetricamente, se |E| está próximo de |V|2, o grafo é considerado denso;

• De acordo com a densidade do grafo, diferentes estruturas de dados são utilizadas para representá-lo.

Page 19: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

19

Representação de Grafos

• Duas formas padrão– Matriz de adjacências

• Indicada para grafos densos.

– Lista de adjacências• Indicada para grafos esparsos.

Page 20: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

20

Matriz de Adjacências

• Consiste em uma matriz |V|×|V| em que a posição irepresenta o vértice i;

• Caso exista uma adjacência entre os vértices i e j a posição i,j na matriz tem o valor 1, caso contrário tem o valor 0– Em grafos não orientados, a matriz de adjacências é

simétrica ao longo da diagonal principal;– Em grafos orientados, apenas as arestas de saída são

representadas;– No caso de grafos ponderados, o valor 1 pode ser

substituído pelo peso da aresta.

Page 21: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

21

Matriz de Adjacências

011105

100114

100103

111012

010101

54321

010005

000104

100003

101002

010101

54321

Page 22: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

22

Lista de Adjacências

• Consiste em um vetor de |V| listas. Em cada posição i, há uma lista onde cada elemento é um vértice adjacente ao vértice i;– No caso de grafos não orientados, as adjacências são

armazenadas em ambos os vértices de incidência;– Em grafos dirigidos, apenas as arestas de saída são

armazenadas.– Em casos de grafos orientados, pode ser criado um

campo em cada elemento da lista para armazenar o valor.

Page 23: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

23

Lista de Adjacências

5

4

3

2

1

5

4

3

2

1

Page 24: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

24

Lista vs. Matriz de Adjacências

• Em uma matriz de adjacências determinar a existência de uma aresta entre vértices u e v é imediato– Em uma lista de adjacências este processo é mais

demorado, além disso, a remoção de uma aresta édificultada.

• Em contraposição, a matriz de adjacências requer espaço suficiente para armazenar as arestas de um grafo completo O(n2), mesmo que esse não seja o caso– A lista de adjacências requer espaço apenas para

armazenar as arestas existentes O(n+m).• Grafos pequenos geralmente são representadas por

matrizes, devido à simplicidade.

Page 25: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

25

Lista de Adjacênciasem Matrizes

• As listas de adjacências podem não usar listasencadeadas– Podem inclusive usar uma matriz para armazenar os

elementos.

• Aparentemente, esta estrutura combina o pior da matrizde adjacências (muito espaço) com o pior da lista de adjacências (determinar a existência de uma aresta);

• Contudo, faz sentido:– É uma estrutura simples de implementar;– O problema do espaço pode ser contornado limitando-se a

quantidade de colunas da matriz.

Page 26: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

26

Lista de Adjacênciasem Matrizes

?4325

?5214

??523

54312

??421

4321

???45

???24

???53

??532

??421

4321

Page 27: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

27

Códigos

• Está disponibilizado um conjunto de códigos originais do Skiena

– Nome de funções, variáveis e comentários traduzidos;– Utilizam a estrutura de lista de adjacências em matrizes;– Os algoritmos a seguir também estão implementados.

• No entanto, é necessário saber o funcionamento dos algoritmos e também adaptar os códigos àsnecessidades– O uso dos códigos é opcional.

Page 28: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

28

Percurso em Grafos

• A operação básica em grafos é o percurso– Ou seja, visitar todos os vértices e arestas uma

única vez em alguma ordem;

• Uma possível dificuldade seria não terminar a busca nunca, por causa de repetição– Por isso marcamos os vértices já visitados.

• Existem dois algoritmos básicos– Busca em Largura;– Busca em Profundidade.

Page 29: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

29

Busca em Largura (BFS)

• A busca em largura (Breadth-First Search - BFS) expande a exploração de um grafo em níveis– A partir do vértice inicial, o nível explorado é o dos vértices

adjacentes;– Após a exploração deste nível, passa-se à exploração do

vértices adjacentes aos do nível anterior;– Caso o grafo seja desconectado, ao fim da exploração de

um componente, passa-se ao próximo;– O procedimento se repete até que todos os vértices

tenham sido explorados.

Page 30: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

30

Busca em Largura (BFS)

• Uma estrutura de fila é utilizada para guiar os passos da busca;

• Durante a exploração, um vértice é descoberto na primeira vez em que é encontrado, quando é então enfileirado– Representado pela cor cinza.

• Quando o vértice é retirado da fila, ele é considerado visitado– Todas as arestas incidentes a ele foram exploradas;– Representado pela cor preta.

Page 31: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

31

Busca em Largura (BFS)

• F: null

Page 32: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

32

Busca em Largura (BFS)

• F: 1→null

Page 33: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

33

Busca em Largura (BFS)

• F: 2→3→4→5→null

Page 34: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

34

Busca em Largura (BFS)

• F: 3→4→5→null

Page 35: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

35

Busca em Largura (BFS)

• F: 3→4→5→6→null

Page 36: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

36

Busca em Largura (BFS)

• F: 4→5→6→7→null

Page 37: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

37

Busca em Largura (BFS)

• F: 5→6→7→8→null

Page 38: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

38

Busca em Largura (BFS)

• F: 6→7→8→9→null

Page 39: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

39

Busca em Largura (BFS)

• F: 7→8→9→null

Page 40: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

40

Busca em Largura (BFS)

• F: 8→9→null

Page 41: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

41

Busca em Largura (BFS)

• F: 9→null

Page 42: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

42

Busca em Largura (BFS)

• F: null

Page 43: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

43

Busca em Largura (BFS)

• Existe uma relação entre o penúltimo e últimovértice descobertos– O último foi descoberto a partir do penúltimo;– Dizemos então que o penúltimo é pai do último;

• Se seguirmos a genealogia dos vértices, obtemos o caminho de menor comprimentoentre o vértice inicial da busca e todos os outros– Em grafos não ponderados.

Page 44: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

44

Busca em Largura - Código

• O arquivo bfs-dfs.c possui uma implementaçãoda BFS– Basta adaptar as funções processa_vertice() e

processa_aresta(), de acordo com a necessidade.

• A função encontra_caminho() analisa a ordemde exploração dos vértices para encontrar o menor caminho entre dois vértices.

Page 45: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

45

Busca em Profundidade (DFS)

• A busca em profundidade (Depth-First Search - DFS) explora todos os níveis de cada adjacência, uma por vez– A partir do vértice inicial, explora-se todos os níveis

possíveis de uma adjacência;– Quando não for mais possível expandir a busca, retorna-

se ao último nó com adjacências ainda não exploradas e retoma-se o processo;

– Em caso de grafos desconectados, uma vez que um componente for totalmente explorado, passa-se ao próximo;

– A exploração é repetida até que todos os nós tenham sido visitados.

Page 46: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

46

Busca em Profundidade (DFS)

• Uma estrutura de pilha é utilizada para guiar os passos da busca;

• Durante a exploração, um vértice é descoberto na primeira vez em que é encontrado, quando é então empilhado– Representado pela cor cinza.

• Quando o vértice não possui mais adjacências a serem exploradas, ele é desempilhado, sendo considerado visitado ou terminado– Representado pela cor preta.

Page 47: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

47

Busca em Profundidade (DFS)

• P: null

2

6

1

4

8

5 97 3

Page 48: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

48

Busca em Profundidade (DFS)

• P: 1→null

2

6

1

4

8

5 97 3

Page 49: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

49

Busca em Profundidade (DFS)

• P: 2→1→null

2

6

1

4

8

5 97 3

Page 50: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

50

Busca em Profundidade (DFS)

• P: 6→2→1→null

2

6

1

4

8

5 97 3

Page 51: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

51

Busca em Profundidade (DFS)

• P: 2→1→null

2

6

1

4

8

5 97 3

Page 52: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

52

Busca em Profundidade (DFS)

• P: 1→null

2

6

1

4

8

5 97 3

Page 53: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

53

Busca em Profundidade (DFS)

• P: 9→5→1→null

2

6

1

4

8

5 97 3

Page 54: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

54

Busca em Profundidade (DFS)

• P: 8→4→1→null

2

6

1

4

8

5 97 3

Page 55: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

55

Busca em Profundidade (DFS)

• P: 7→3→1→null

2

6

1

4

8

5 97 3

Page 56: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

56

Busca em Profundidade (DFS)

• P: 1→null

2

6

1

4

8

5 97 3

Page 57: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

57

2

6

1

4

8

5 97 3

Busca em Profundidade (DFS)

• P: null

Page 58: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

58

Classificação de Arestas

• Podemos utilizar DFS para classificar as arestas em:– Arestas de Árvore

• São aquelas que incidem em vértices ainda não descobertos;

• Formam uma árvore durante a exploração do grafo.

– Arestas de Retorno• Incidem a vértices já descobertos pela busca, formando

ciclos assim.

• Se não há aresta de retorno, trata-se de uma árvore;

• Isto funciona para grafos não direcionados.

Page 59: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

59

Classificação de Arestas

Page 60: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

60

Classificação de Arestas

Árvore Retorno

1

2

3

4

Page 61: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

61

Classificação de Arestas

Árvore Retorno

1

2

3

4 5

Page 62: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

62

Classificação de Arestas

Árvore Retorno

1

2

3

4 5

Page 63: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

63

Classificação de Arestas

Árvore Retorno

1

2

3

4 56

Page 64: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

64

Classificação de Arestas

Árvore Retorno

1

2

3

4 56

Page 65: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

65

Classificação de Arestas

Árvore Retorno

1

2

3

4 56

Page 66: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

66

Conectividade

• Dois vértices u e v de um grafo G são ditos conexos se houver um caminho em G com início em u e final em v– Consideramos que todo vértice é conectado a si

mesmo (mesmo sem a existência de uma aresta).

• Um Componente Conexo é formado por um conjunto de vértices conexos.

Page 67: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

67

Conectividade

Um grafo conexo (ou conectado). Um grafo desconexo (ou desconectado).

O vértice 4 é isolado.

Page 68: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

68

Conectividade

• Podemos usar tanto BFS quando DFS para detectar componentes conectados– Durante a exploração:

• Se todos os vértices foram visitados seminterrupções, o grafo é composto de um únicocomponente conectado;

• Caso contrário, recomeçamos a exploração no primeiro vértice ainda não descoberto, detectandoassim um novo componente conectado.

Page 69: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

69

Conectividade

1

2

3

4

65

7

8

Page 70: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

70

Conectividade

1

2

3

4

65

7

8

Page 71: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

71

Conectividade

1

2

3

4

65

7

8

Page 72: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

72

Busca em ProfundidadeCódigo

• O arquivo bfs-dfs.c possui uma implementaçãoda DFS– Novamente, basta adaptar as funções

processa_vertice() e processa_aresta(), de acordo com a necessidade.

• O arquivo findcycle.c analisa as arestas para detectar ciclos;

• O arquivo connected.c enumera oscomponentes conexos de um grafo.

Page 73: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

73

Busca em Largura vs. Busca em Profundidade

• Apesar de terem a mesma complexidade, e explorarem o grafo completamente, as diferentes ordens de visitação dos nós conferem diferentes propriedades:– A busca em largura é usada para detecção de

componentes conexos e obtenção da menor distância em grafos não orientados;

– A busca em profundidade é utilizada para ordenação topológica, para verificar se um grafo é acíclico, bipartido, quais são seus vértices de articulação, etc.;

– Em outros problemas, ambos podem ser utilizados sem distinção.

Page 74: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

74

Perguntas?

Page 75: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

75

Na próxima aula

• Prática de Estruturas de Dados– Pilhas;– Listas;– Filas

• Filas de Prioridades.

– Dicionários.

Page 76: BCC402 Algoritmos e Programação Avançada · Grafos Ponderados • Grafos nos quais as arestas possuem valores ou pesos são chamados grafos ponderados – Representam situações

76

FIM