06 Grafos
06 Grafos
06 Grafos
5 3 6
GRAFOS
Grafos são estruturas de dados formadas por um conjunto de vértices e um conjunto
de arestas.
1
arestas
4 2
vértices
5 3 6
INSTITUTO DE COMPUTAÇÃO - UFF 3
APLICAÇÕES DE GRAFOS
Associando-se significados aos vértices e às arestas, o grafo passa a constituir um
modelo de uma situação ou informação real
1
arestas
4 2
vértices
5 3 6
GRADE CURRICULAR
5 3 6
GRAFOS ORIENTADOS X NÃO ORIENTADOS
As arestas podem ter uma direção ou podem ser bi-direcionais
Grafos orientados: as arestas possuem uma direção
Também são chamados de grafos dirigidos ou digrafos
Grafos não orientados: as arestas são bi-direcionais (se existe uma conexão a → b
então também existe uma conexão b → a)
4 3
INSTITUTO DE COMPUTAÇÃO - UFF 17
GRAFO ORIENTADO (DIRIGIDO OU DIGRAFO)
Arestas possuem uma direção
Alguns autores usam o termo arco para as arestas de um grafo dirigido
Exemplo: 1
G = (V, E)
V = {1, 2, 3, 4, 5}
5 2
E = {(1, 5), (2, 3), (2, 4), (3, 2), (4, 3), (5, 2), (5, 4)}
4 3
INSTITUTO DE COMPUTAÇÃO - UFF 18
GRAFO ORIENTADO (DIRIGIDO OU DIGRAFO)
Exemplos:
Malha de transporte urbano
Pessoa A segue pessoa B no Instagram (mas o contrário nem
1
sempre é verdadeiro)
5 2
4 3
INSTITUTO DE COMPUTAÇÃO - UFF 19
GRAFO NÃO ORIENTADO
Arestas são bi-direcionais
G = (V, E)
1
V = {1, 2, 3, 4, 5, 6}
E = {{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4},
{2, 6}, {3, 5}, {4, 5}, {4, 6}, {6, 2}} 4 2
5 3 6
INSTITUTO DE COMPUTAÇÃO - UFF 20
GRAFO NÃO ORIENTADO
Arestas são bi-direcionais
G = (V, E)
1
V = {1, 2, 3, 4, 5, 6}
E = {{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4},
{2, 6}, {3, 5}, {4, 5}, {4, 6}, {6, 2}} 4 2
5 3 6
INSTITUTO DE COMPUTAÇÃO - UFF 21
GRAFO NÃO ORIENTADO
Exemplo:
Amigos no Facebook (se A é amigo de B, B 1
também é amigo de A)
Mapa de cabeamento de uma rede (se é
possível enviar dados do ponto A ao ponto
B, então também é possível enviar do
ponto B ao ponto A) 4 2
5 3 6
INSTITUTO DE COMPUTAÇÃO - UFF 22
GRAFOS ORIENTADOS X NÃO ORIENTADOS
Um grafo expressa uma relação binária R
Grafo não orientado
{v1, v2} ∈ G(E) ⇔ v1 R v2 ^ v2 R v1
Exemplo: R = amigo no Facebook
Grafo orientado
(v1, v2) ∈ G(E) ⇔ v1 R v2
Exemplo: R = seguir alguém no Instagram
v1 v2 v1 v2 v1 v2
adjacência é
simétrica adjacência não é simétrica
INSTITUTO DE COMPUTAÇÃO - UFF 25
DEFINIÇÕES E TERMINOLOGIA
Dados dois vértices adjacentes v1 e v2
Em um grafo orientado, uma aresta (v1, v2) é incidente de (sai de) v1 e é incidente
a (entra em) v2
v1 v2
v1 v2
v1 v8
v2 v3 v4
v5 v6 v7
2
0
v1 v8
Vértices com grau 0 são
4 4
ditos vértices isolados
v2 v3 v4 4
v5 v6 v7 3
4
3
v2 v3 v4
v5 v6 v7
5 3
v2 v3 v2 v3
v4 v5 v4 v5
INSTITUTO DE COMPUTAÇÃO - UFF 32
DEFINIÇÕES E TERMINOLOGIA
Um grafo é dito completo se todos os seus pares de vértices forem adjacentes
v1
v2 v3
v4 v5
INSTITUTO DE COMPUTAÇÃO - UFF 33
DEFINIÇÕES E TERMINOLOGIA
Uma aresta que tem ambas as extremidades em um mesmo vértice é chamada laço
v1
v2 v3
v4 v5
INSTITUTO DE COMPUTAÇÃO - UFF 35
DEFINIÇÕES E TERMINOLOGIA
Um grafo sem ciclos é dito acíclico
v1 v1 v1
v2 v3 v2 v3 v2 v3
v4 v5 v4 v5 v4 v5
v1 v2 v1 v2
v3 v4 v3 v4
vértices
1 2 3 4 5 6
1 0 1 0 1 0 1
2 0 0 1 1 0 0
3 0 0 0 0 0 0
1 4
4 0 0 1 0 1 0
5 0 0 0 1 0 1
6 0 1 0 1 0 0
6 5
MATRIZ DE ADJACÊNCIA PARA
GRAFO NÃO ORIENTADO
2
1 2 3 4
1 0 1 1 0
1 2 1 0 1 1
4 3 1 1 0 1
4 0 1 1 0
3
MATRIZ DE ADJACÊNCIA PARA
GRAFO NÃO ORIENTADO
2
1 2 3 4
1 0 1 1 0
1 2 0 1 1
4 3 0 1
4 0
3 Matriz é simétrica
MATRIZ DE ADJACÊNCIA PARA GRAFOS
VALORADOS
Valores associados às linhas podem ser representados por uma extensão simples da
Matriz de Adjacência
aij = k se (vi,vj) Î G(E)
1
aij = * se (vi,vj) Ï G(E) 19 9 1 2 3 4 5 6
1 * 9 * 7 * 19
2 9 * 23 15 * *
6 7 2
3 * 23 * 27 * *
17 15
8 4 7 15 27 * 30 17
23
5 * * * 30 * 8
6 19 * * 17 8 *
5 4 3
30 27
MATRIZ DE ADJACÊNCIA
Matriz binária: ocupa pouco espaço, especialmente para grafos grandes
Manipulação simples: recursos para manipular matrizes existem em qualquer
linguagem de programação
Fácil determinar se (vi,vj) Î G(E)
Fácil determinar vértices adjacentes a um determinado vértice v
Quando o grafo é não orientado, a MA é simétrica (mais econômica)
Inserção de novas arestas é fácil
Inserção de novos vértices é muito difícil
vértices
a1 a2 a3 a4 a5
1 -1 -1 0 0 0
1 a3
4 2 1 0 -1 -1 0
a2 3 0 1 1 0 -1
a5 4 0 0 0 1 1
3 INSTITUTO DE COMPUTAÇÃO - UFF 48
REPRESENTAÇÃO FÍSICA DE GRAFOS
Matriz de adjacência
Matriz de incidência
Lista de adjacência
Listas de incidência
G
2
1 1 ? 2 ? 3 ? /
4
2 ? 3 ? 4 ? /
3
3 ? 4 ? /
4 ? / /
2
1
4
G 1 2 1 3 2 3 2 4 3 4 /
3
typedef struct vizinho {
int id_vizinho; G
struct vizinho *prox;
}TVizinho; TVizinho
1 2 3 /
TGrafo
typedef struct grafo{
int id_vertice; 2 3 4 /
TVizinho *prim_vizinho;
struct grafo *prox; 3 4 /
}TGrafo;
4 / /
BUSCA 1
4
3
Busca por um vértice v1
Basta percorrer a lista de vértices até encontrar v1
G
Busca por uma aresta (v1, v2) TVizinho
Percorrer a lista de vértices até encontrar v1
1 2 3 /
TGrafo
Depois percorrer a lista de vizinhos de v1 até encontrar v2
2 3 4 /
3 4 /
4 / /
1 2 3 /
2
1 2 3 /
3 / /
3
4 /
2
1 1 2 3 /
4
2 3 /
3
3 / /
Grafo orientado
Inserção de aresta (v1, v2): inserir v2 na lista de vizinhos de v1
4 /
2
1 1 2 3 /
4
2 1 /
3
3 / 1 /
4 2
2
1 1 2 3 /
4
2 4 1 /
3
3 / 1 /
4 /
2
1 1 2 3 /
4
2 3 /
3
3 / /
4 /
2
1 1 2 3 /
4
2 4 3 /
3
3 / /
Grafo orientado
Exclusão de aresta (v1, v2): excluir v2 da lista de vizinhos de v1
4 2
2
1 1 2 3 /
4
2 3 4 1 /
3
3 / 1 2 /
4 2
2
1 1 2 3 /
4
2 3 4 1 /
3
3 / 1 2 /
4 2
2
1 1 2 3 /
4
2 4 1 /
3
3 / 1 /
1 2 3 /
2
1 2 3 4 /
4
3 4 /
3
4 / /
1 2 3 /
2
1 2 3 4 /
4
3 4 /
3
4 / /
1 2 3 /
2
1 2 4 /
4
3 4 /
3
4 / /
4 / /
4 2
2
1 1 2 3 /
4
2 4 1 /
3
3 / 1 /
4 2
2
1 1 2 3 /
4
2 4 1 /
3
3 / 1 /
4 /
2
1 1 2 3 /
4
2 1 /
3
3 / 1 /
4 /
2
1 1 2 3 /
4
2 1 /
3
3 / 1 /
4 /
2
1 1 3 /
4
2 /
3
3 / 1 /
4 /
2
1 1 3 /
4
2 /
3
3 / 1 /
4 /
1 1 3 /
4
3
3 / 1 /
2 3 4 /
3 4 /
2
1 4 / /
4
2 3 4 /
3 4 /
2
1 4 / /
4
2 /
3 4 /
2
1 4 / /
4
2 /
3 4 /
2
1 4 / /
4
3 4 /
1 4 / /
4
Ana 23 Felipe 20
Marcos 19
João 25 Jane 30
Renata 35