Teoria dos Grafos
Implementação de Grafos
Basicamente existem três estruturas de dados propícias para representar grafos:
Matriz de Adjacente
Lista Adjacente
Matriz Incidência
1 Matriz Adjacência
Uma matriz Adjacente é uma matriz tal que:
M(i, j) = 1
M(i, j) = 0
se a aresta (i,j) existe
senão existe arco (i,j)
Onde i e j são vértices do grafo
GRAFO
REPRESENTAÇÃO
Em caso de grafos orientado tem-se:
Se NÃO existe a aresta (i,j) entre dois vértices i e j então M(i, j) = 0
Se existe a aresta orientada (i,j) entre dois vértices i e j então M(i, j) = 1
Se existe a aresta orientada (j,i) entre dois vértices j e i então M(j, i) = -1
Exemplo:
GRAFO
Nota de Aula
Sidney Vieira
REPRESENTAÇÃO
1
Em caso de grafos valorados tem-se:
Se NÃO existe a aresta (i,j) entre dois vértices i e j então M(i, j) = 0
Se existe a aresta valorada (i,j) entre dois vértices i e j então M(i, j) = valor
de i a j
Exemplo:
Grafo
Representação
1
2
3
4
1
2
3
4
0
0
0
0
30
0
5
0
0
0
0
0
20
10
0
0
2 Listas de adjacência
Nesta representação emprega-se a estrutura de lista de modo que as n linhas da
matriz de adjacência são representadas como n listas encadeadas. Existe uma lista para
cada vértice em G. Os nós na lista i representam os vértices que são adjacentes ao
vértice i.
Cada nó na lista possui pelo menos dois campos:
VÉRTICE → armazena o indice do vértice que é adjacente i
NEXT → um ponteiro para o próximo nó adjacente.
As cabeças das listas podem ser armazenas em um array de ponteiros para
facilitar o acesso aos vértices.
Nota de Aula
Sidney Vieira
2
Exemplo:
GRAFO
REPRESENTAÇÃO
3 Matriz de incidência
Sendo
G(V,A) um grafo de n vértices v1, v2... vn, e m arestas a1, a2...am, e
nenhum laço.
Uma matriz de incidência é uma matriz n x m, onde o valor de cada elemento ejk
da matriz é determinado da seguinte maneira:
M(i, j) = 1
M(i, j) = 0
se a aresta ak é incidente ao vértice aj
caso contrário
Exemplo:
GRAFO
REPRESENTAÇÃO
a1 a2 a3 a4 a5 a6 a7 a8
Nota de Aula
Sidney Vieira
v1 0
0
0
1
0
1
0
0
v2 0
0
0
0
1
1
1
1
v3 0
0
0
0
0
0
0
1
v4 1
1
1
0
1
0
0
0
v5 0
0
1
1
0
0
1
0
v6 1
1
0
0
0
0
0
0
3
Propriedades da matriz de incidência:
•
•
•
•
Como cada aresta é incidente a exatamente dois vértices, cada coluna contém
exatamente dois 1.
O número de 1 em cada linha é igual ao grau do vértice correspondente.
Uma linha que contém somente 0 representa um vértice isolado.
Arestas paralelas resultam em duas colunas idênticas.
4 Alguns Algoritmos de implementação:
4.1 Grau de um Vértice
para i <-- 1 até N, faça
grau <-- 0
para j <-- 1 até N, faça
se matriz[i][j] = 1, então
grau <-- grau + 1
fim-se
fim-para
imprima "O vértice " i " tem grau " grau "."
fim-para
4.2 Matriz de Adjacências
para i
1 até N, faça
para j <-- 1 até N, faça
matriz[i][j] <-- 0
fim-para
fim-para
enquanto (recebe x, y e x <-- 0), faça
matriz[x][y] <-- 1
matriz[y][x] <-- 1
fim-enquanto
4.3 Lista de Adjacências
para i
1 até N, faça
grau[i] <-- 0
fim-para
enquanto (recebe x, y e x != 0), faça
lista[x][grau[x]++] <-- y
Nota de Aula
Sidney Vieira
4
lista[y][grau[y]++] <-- x
fim-enquanto
4.4 Lista de Adjacências junto com Matriz de Adjacências
para i
1 até N, faça
para j <-- 1 até N, faça
matriz[i][j] <-- 0
fim-para
grau[i] <-- 0
fim-para
enquanto (recebe x, y e x != 0), faça
matriz[x][y] <-- 1
matriz[y][x] <-- 1
lista[x][grau[x]++] <-- y
lista[y][grau[y]++] <-- x
fim-enquanto
Nota de Aula
Sidney Vieira
5
Download

Implementação de Grafos