0% acharam este documento útil (0 voto)
21 visualizações45 páginas

Aula 12

O documento descreve conceitos básicos sobre grafos, incluindo suas representações em matrizes de adjacência e listas de adjacência. Também apresenta o algoritmo de busca em largura (BFS) para encontrar distâncias mínimas entre vértices em um grafo.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
21 visualizações45 páginas

Aula 12

O documento descreve conceitos básicos sobre grafos, incluindo suas representações em matrizes de adjacência e listas de adjacência. Também apresenta o algoritmo de busca em largura (BFS) para encontrar distâncias mínimas entre vértices em um grafo.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Estrutura de Dados (CC4652)

Aula 12 - Grafos

Prof. Luciano Rossi

Ciência da Computação
Centro Universitário FEI

2º Semestre de 2023

1 / 45
Grafos
Classificação das Estruturas de Dados

2 / 45
Grafos
Conceitos

Um grafo consiste em um conjunto de nós (ou vértices) e em um


conjunto de arestas (ou arcos)
Cada aresta em um grafo é especificada por um par de nós.
Grafo com 5 nós e 6 arestas:

3 / 45
Grafos
Conceitos

Uma matriz de adjacência é uma das formas de se representar um grafo


Em grafos não direcionados, as matrizes de adjacência são simétricas
ao longo da diagonal principal

4 / 45
Grafos
Conceitos

Cada nó ou aresta pode ter propriedades, características ou dados


Ou seja, os nós ou arestas podem conter informação

5 / 45
Grafos
Conceitos

Os grafos podem ser:


▶ Não Direcionados (não dirigidos): não existe direção obrigatória
▶ Direcionados (dirigidos ou dígrafos): As arestas têm sentido - a ponta
da seta representa o segundo nó

6 / 45
Grafos
Conceitos

Os grafos podem também ter suas arestas ponderadas

7 / 45
Grafos
Conceitos

Exemplos de uso:

8 / 45
Grafos
Conceitos
Grafo - Exemplo Linkedin

9 / 45
Grafos
Conceitos

Exemplos de uso Grafo Não Direcionado:


▶ Amizade em Rede Social

10 / 45
Grafos
Conceitos

Exemplos de uso Grafo Direcionado:


▶ Caminho entre duas cidades: Cidade 1 e Cidade 6

11 / 45
Grafos
Conceitos

Dois vértices que são conectados por uma aresta são chamados de
adjacentes. Ex: A e B são adjacentes
Uma aresta é dita ser incidente a cada um de seus nós terminais. Ex:
(A, B) é incidente aos vértices A e B

12 / 45
Grafos
Conceitos

Um vértice que não possui nenhuma aresta incidente é chamado de


isolado
Um grafo com nenhum vértice é chamado de vazio

13 / 45
Grafos
Conceitos

Um vértice que é nó terminal de um laço é dito ser adjacente a si


próprio.

14 / 45
Grafos
Conceitos

Os nós são: A,B,C,D,E,F,G,H


As arestas são: (A,B), (A,D), (A,C), (C,D), (C,F), (E,G), (A,A)

15 / 45
Grafos
Conceitos

Vizinhança Aberta (Open Neighborhood): Conjunto de nós adjacentes a


um nó.
▶ Exemplo: N (2) = {3, 5, 1}
Vizinhança Fechada (Close Neighborhood): Conjunto de nós adjacentes
a um nó e o próprio nó.
▶ Exemplo: N (2) = {2, 3, 5, 1}

16 / 45
Grafos
Conceitos

Grau do Vértice (Degree of a Vertex): Medido pela incidência


▶ Exemplo: d(2) = 3
▶ Exemplo: d(6) = 1
▶ Exemplo: d(1) = 4

17 / 45
Grafos
Conceitos

Grau do Vértice (Degree of a Vertex):

18 / 45
Grafos
Conceitos

Grafo Completo
▶ Um grafo completo de n vértices é um grafo simples cujo conjunto de
arestas contém exatamente uma aresta para cada par de vértices distintos.
▶ Exemplos para 1, 2, 3, 4 e 5 nós:

19 / 45
Grafos
Conceitos

Grafo Bipartido
▶ Grafo Bipartido é um grafo cujos vértices podem ser divididos em dois
conjuntos disjuntos U e V tais que toda aresta conecta um vértice de U a
um vértice em V

20 / 45
Grafos
Representações

Matriz de Adjacência
▶ Grafo Bipartido é um grafo cujos vértices podem ser divididos em dois
conjuntos disjuntos U e V tais que toda aresta conecta um vértice de U a
um vértice em V

21 / 45
Grafos
Representações

Matriz de Adjacência

22 / 45
Grafos
Representações

Matriz de Adjacência

23 / 45
Grafos
Representações

Lista de Adjacência
▶ A Lista de Adjacência é um array de listas
▶ O tamanho do array é igual ao número de vértices

24 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

BF S(G, s)
▶ Entrada: um grafo G e um vértice inicial s;
▶ Saída: distâncias em relação ao vértice inicial.

25 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

Duas partes:
▶ Inicialização;
▶ Execução;
Baseado em fila:
▶ First-In, First-Out.

26 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

Atributo dos vértices:


▶ distância
▶ cor:
⋆ branca (inicial)
⋆ cinza (visitado)
⋆ preta (finalizado)

27 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

BF S(G, s) : 8 enquanto Q! = V AZIO faça


1 para cada vértice vi em G.V − {s} faça 9 ui = Remove(Q)
2 vi .d = ∞ 10 para cada vi em G.Adj[ui ] faça
3 vi .cor = BRAN CO 11 se vi .cor == BRAN CO
4 s.d = 0 12 vi .d = ui .d + 1
5 s.cor = CIN ZA 13 vi .cor = CIN ZA
6 Q = V AZIO 14 Insere(Q, vi )
7 Insere(Q, s) 15 ui .cor = P RET O

28 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

BF S(G, s) :
1 para cada vértice vi em G.V − {s} faça
2 vi .d = ∞
3 vi .cor = BRAN CO
4 s.d = 0
5 s.cor = CIN ZA
6 Q = V AZIO
7 Insere(Q, s)

29 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

30 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

31 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

32 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

33 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

34 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

35 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

36 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

37 / 45
Teoria dos Grafos
Algoritmos de Busca em Grafos - Busca em Largura (Breadth First Search (BFS))

8 enquanto Q! = V AZIO faça


9 ui = Remove(Q)
10 para cada vi em G.Adj[ui ] faça
11 se vi .cor == BRAN CO
12 vi .d = ui .d + 1
13 vi .cor = CIN ZA
14 Insere(Q, vi )
15 ui .cor = P RET O

38 / 45
Grafos
Laboratório

1 #include <stdio.h>
2
3 #define V 6
4 #define E 12
5
6 int get_index(char x){
7 return x - 97;
8 }
9
10 void inicia_arestas(int arestas[V][V]){
11 for(int i = 0; i < V; i++){
12 for(int j = 0; j < V; j++){
13 arestas[i][j] = 0;
14 }
15 }
16 }
17 ...

39 / 45
Grafos
Laboratório

1 ...
2 void cria_arestas(int arestas[V][V], int v, int u){
3 arestas[v][u] = 1;
4 }
5
6 void mostra_arestas(int arestas[V][V]){
7 for(int i = 0; i < V; i++){
8 for(int j = 0; j < V; j++){
9 printf("%d ", arestas[i][j])
;
10 }
11 printf("\n");
12 }
13 }
14 ...

40 / 45
Grafos
Laboratório

1 ...
2 void mostra_adjacentes(int arestas[V][V], char v){
3 //implementar
4 }
5
6 void mostra_distancias(int arestas[V][V], char v){
7 //implementar
8 }
9 ...

41 / 45
Grafos
Laboratório

Matriz de Adjacências

0 1 0 1 1 0
1 0 1 0 0 1
0 1 0 0 0 0
1 0 0 0 0 0
1 0 0 0 0 1
0 1 0 0 1 0

42 / 45
Grafos
Laboratório

Adjacências

a -> b
a -> d
a -> e
b -> a
b -> c
b -> f
c -> b
d -> a
e -> a
e -> f
f -> b
f -> e

43 / 45
Grafos
Laboratório

Matriz de Distâncias

0 1 2 1 1 2
1 0 1 2 2 1
2 1 0 3 3 2
1 2 3 0 2 3
1 2 3 2 0 1
2 1 2 3 1 0

44 / 45
Estrutura de Dados (CC4652)
Aula 12 - Grafos

Prof. Luciano Rossi

Ciência da Computação
Centro Universitário FEI

2º Semestre de 2023

45 / 45

Você também pode gostar