You are on page 1of 8

Grafos

A primeira evidência do uso de grafos foi em 1736 quando Euler os utilizou para resolver o
problema de caminhar nas pontes entre duas ilhas cortadas por um rio. Esse problema ficou
conhecido como o Problema das Pontes de Königsberg, no qual havia 7 pontes que cruzavam o rio
Pregel.

Motivação: A cidade de Königsberg é banhada pelo rio Pregel que, ao atravessar a cidade se
ramifica formando uma ilha (Kneiphof) que está ligada à restante parte da cidade por sete
pontes. Dizia-se que os habitantes da cidade, nos dias de descanso, tentavam efetuar um
percurso que os obrigasse a passar por todas as pontes, mas apenas uma vez em cada uma.
Como as suas tentativas sempre falharam, muitos deles acreditavam que não era possível
encontrar tal percurso. Será que tinham razão?

A partir da solução desse problema por Euler, grafos têm sido utilizados em grande variedade de
aplicações que vão de circuitos elétricos até ciências sociais.

Definição de grafo
Considere o mapa a seguir, com ruas, quadras residenciais, espaços verdes, lagos, etc.
Problema
Existem inúmeras possibilidades para a polícia controlar todos os parquímetros. O trabalho aqui
será o de ajudar o chefe da polícia a encontrar a solução ótima, o caminho mais eficiente que deve
tomar o seu subalterno, que viaja a pé, para controlar a totalidade dos parquímetros da sua zona.
O chefe da polícia tem dois objetivos em mente: (i) o polícia encarregado de efetuar a vistoria deve
percorrer todos os passeios que possuem parquímetros passando duas vezes pelo mesmo
percurso o menor número de vezes possível; (ii) o caminho deve começar e acabar no mesmo
ponto, por exemplo, no local onde deixou estacionada a viatura.
Pode-se pensar nesse problema em termos de uma estrutura chamada grafo um dos muitos
modelos matemáticos que ajuda a simplificar problemas matemáticos complexos.

[Grafo] Um grafo é um par ordenado de conjuntos disjuntos (V,A), onde V é um conjunto arbitrário
que se designa por conjunto dos vértices e A um subconjunto de pares não ordenados de
elementos (distintos) de V que se designa por conjunto das arestas.

A seguir, é mostrada a representação das pontes de Königsberg em forma de grafos, no qual os


vértices representam os locais e as arestas as pontes.

Grafo G C

c d g

e
A D

a b f

G={V,A}
V = { A, B, C, D }
A = { (A,C,c), (A,C,d), (A,B,a), (A,B,b), (A,D,e), (B,D,f), (C,D,g) }

No caso do problema dos policiais citado anteriormente, pode-se representar todo o território a ser
patrulhado por um grafo: pode-se pensar que cada cruzamento é um vértice e cada rua com
parquímetro uma aresta.

Mapa
Grafo

Na figura abaixo se efetua uma simplificação do problema: despreza-se o comprimento das ruas e
esquinas. Além disso, são mostrados dois percursos que o policial pode tomar para efetuar o
controle Em ambos os casos o ponto de partida coincide com o ponto de chegada. No entanto, a
segunda possibilidade é melhor que a primeira, uma vez que nesse caso o policial percorre cada
rua apenas uma única vez.

Outras definições úteis

Antes de continuar a análise do problema, considere alguns conceitos importantes na teoria dos
grafos. Esses conceitos são bastante simples, embora seja apresentado com certo formalismo.

Grafo G C

c d g

e
A D

a b f

[Ordem e dimensão] Seja G=(V,A).


(i) Ordem de G, denotada por |V|, é o número de vértices de G;
(ii) Dimensão de G, denotada por |A|, é o número de arestas de G.

Exemplo: Considerando o grafo G (Exemplo das pontes) tem-se:


Ordem(G) = 4 vértices
Dimensão(G) = 7 arestas
Note que a dimensão |A| de G=(V,A) varia entre 0 e o número de combinações de |V| dois a dois.
O valor mais alto para a dimensão é obtido para os chamados grafos completos, isto é, os grafos
onde todos os vértices estão ligados entre si.

[Incidência, adjacência e grau]


(i) Incidência: uma aresta é dita incidente aos vértices que a compõe.
(ii) Adjacência: dois vértices são ditos adjacentes se existe uma aresta entre os mesmos.
(iii) Grau representa o número de arestas incidentes a um vértice.

Exemplo: Considerando o grafo G (Exemplo das pontes) tem-se:


A aresta c é incidente aos vértices A e B.
O vértice B é adjacente aos vértices A e D.
O grau do vértice A é igual a 5.

[Percurso, caminho e trajeto] Seja G=(V,A).


(i) Percurso é toda a seqüência de vértices e arestas da forma
x1,{x1,x2},x2,..., xi,{xi,xi+1},xi+1,..., xk-1,{xk-1,xk},xk
(com eventual repetição de vértices e arestas). Usa-se ainda a notação
x1x2...xk.
(ii) Caminho é um percurso sem vértices repetidos.
(iii) Trajeto é um percurso sem arestas repetidas.

A dimensão de um caminho/trajeto é também designada por comprimento.

Exemplo: Considerando o grafo G (Exemplo das pontes) tem-se:


Percurso P1 = A Æ B Æ A Æ D Æ C Æ D
Caminho C1 = A Æ(c) B Æ(g) D Æ(f) C
Trajeto T1 = A Æ(c) B Æ(d) A ((a) C ((b) A

[Ciclo e circuito] Seja G=(V,A).


(i) Ciclo é um caminho de comprimento não nulo fechado, i.e. com extremos coincidentes.
(ii) Circuito é um trajeto de comprimento não nulo fechado.

Exemplo: Considerando o grafo G (Exemplo das pontes) tem-se:


Ciclo C2 = A Æ B Æ D Æ C Æ A
Circuito C3 = A Æ(c) B Æ(d) A Æ(a) C Æ(b) A

Um grafo sem ciclos é dito acíclico.

[Dígrafo (Grafo orientado)] Seja D=(V,A) um grafo constituído de um conjunto finito não vazio de
V (os vértices) e um conjunto A (as arestas orientadas) de pares ordenados de vértices. Portanto
em um dígrafo cada aresta (x,y) possui uma única direção de x para y.

Considere o grafo definido por:


V = { p | p é uma pessoa da família Silva }
A = { (x,y) | < x é pai/mãe de y > }

Um exemplo de desse grafo é:


V = { Emerson, Isadora, Renata, Antonio, Rosane, Cecília, Alfredo }
A = {(Isadora, Emerson), (Antonio, Renata), (Alfredo, Emerson), (Cecília, Antonio),
(Alfredo, Antonio)}
Renata

Emerson Antonio

Isadora Alfredo Cecília

A relação definida por A não é simétrica, pois se <x é pai/mãe de y>, não é o caso de <y é
pai/mãe de x>. Há, portanto, uma orientação na relação, com um correspondente efeito na
representação gráfica de D.

[Laço] Um laço é uma aresta ou arco do tipo a=(v,v), ou seja, que relaciona um vértice a ele
próprio.

[Arestas paralelas] Arestas paralelas são duas arestas com as mesmas extremidades. Por
exemplo, no grafo a seguir, as arestas a e b são paralelas.

Dado o grafo a seguir, veja a sua representação:

G = {V,A} sendo
V={1,2,3,4}
A={(1,2,a),(1,2,b),(2,2,c),(2,3,d),(1,3,e),(3,4,f)}

Laço c
O nó 2 tem grau 4
2
b
Arestas paralelas d
a
e f
1 3 4

[Percurso ou circuito de Euler] Um percurso simples ou um circuito simples é dito euleriano se


ele contém todas as arestas de um grafo. Um grafo que contém um circuito euleriano é um grafo
euleriano. Um grafo que não contém um circuito euleriano, mas contém um percurso euleriano
será chamado grafo semi-euleriano.
3

1 2 1 5

3 4 6
2

Grafo Euleriano 4

Grafo Semi-Euleriano

[Ciclo Hamiltoniano] Um ciclo hamiltoniano em um grafo G é definido como um caminho


simples, fechado passando em cada vértice de G exatamente uma vez. Um grafo que admite um
ciclo hamiltoniano é um grafo hamiltoniano.

1 2 1 2

5 5

3 4 3 4

Grafo hamiltoniano Grafo não hamiltoniano

Os problemas desta classe são, de modo geral, de dificuldade maior que os problemas eulerianos.
Enquanto que um grafo euleriano pode ser verificado em tempo linear, não se conhece algoritmo
polinomial para verificar se um grafo é hamiltoniando, exceto para casos particulares. Por exemplo,
não é complicado verificar que um grafo completo possui um ciclo hamiltoniano em tempo O(n2).

Exercício _____________________________________________________________ 

1. Desenhe o grafo a seguir:


G = {V,A}
V = {1,2,3,4,5}
A = {(1,2,a),(1,3,b),(3,4,c),(3,4,d),(4,5,e),(5,5,f)}
(i) Esse grafo é completo?
(ii) Indique:
a) Ordem;
b) Dimensão;
c) Laços;
d) Grau dos vértices;
(iii) Encontre:
a) dois vértices que não são adjacentes;
b) um vértice adjacente a ele mesmo;
c) dois arcos paralelos;
d) um caminho do comprimento 5;
e) um ciclo;
Representação Computacional
Uma maneira natural de representar um grafo no computador é utilizar uma matriz, aproveitando
assim de todas as manipulações permitidas pela álgebra linear. Basicamente, existem dois tipos de
matrizes para representar de maneira não equívoca um grafo: matrizes e listas de adjacência. Em
seguida são apresentadas as duas representações mais compactas.

Matriz de adjacência
Suponha que um grafo possui n vértices numerados V={1,2,3,4}. Essa numeração impõe uma
ordem arbitrária nos vértices. No entanto, é importante ressaltar que essa ordem não influencia no
conjunto. A partir dela é possível construir uma matriz n x n onde o elemento i,j representa a
quantidade de arestas.
b
1 2 3 4
1 2 1 2
f c
2 2 1 1 a
3 1 1 1 d e
1 3 4
4 1

Para um grafo orientado (dígrafo) as arestas são apenas representadas na respectiva direção, ou
seja, a matriz não necessariamente será simétrica.

b
1 2 3 4
1 1 1 2
f c
2 1 1 1 a
3 d e
1 3 4
4 1

Lista de adjacência

Em geral muitos grafos possuem poucas arestas e, conseqüentemente, a matriz de adjacência


possuirá muitos zeros (conhecida como matriz esparsa). Um grafo com poucos arcos pode ser
armazenado de forma mais eficiente guardando apenas os elementos não-nulos. Para isso, é
usada a lista de adjacências, composta por listas encadeadas. As arestas de um grafo podem ter
pesos, os quais indicam uma distância, um custo, entre outras coisas, de forma a permitir a
modelagem de um problema. A esse grafo com pesos dá-se o nome de Grafo Ponderado. Esses
pesos devem ser armazenados junto com a informação das arestas.
Obs: Os pesos estão destacados em negrito e itálico.
1 2 7 3 9
3
2 2 3 1 8 3 7
2
3
8 7
3 8 7
4
9 8
1 3 4
Exercícios ____________________________________________________________ 

1. Construa a matriz e a lista de adjacência para os seguintes grafos:

5 3

3
8 7 8
7 1 2
9 6
1 2 4

5 4

1
7

1 2 5

7
9 6
2 3 4 3 4
8 4
6

2. Construa o grafo a partir da matriz de adjacência:

A B C D E A B C D E
A 0 1 1 1 0 A 0 0 2 1 0
B 1 0 0 0 1 B 0 1 0 0 0
C 1 0 0 0 1 C 0 1 0 1 1
D 1 0 0 0 1 D 2 1 0 1 1
E 0 1 1 1 0 E 0 1 1 1 0

A B C D A B C D
A 2 1 0 0 A 0 1 2 0
B 1 0 1 1 B 1 0 0 0
C 0 1 1 2 C 2 0 0 2
D 0 1 2 0 D 0 0 2 0

You might also like