Escolar Documentos
Profissional Documentos
Cultura Documentos
JÚLIO SILVEIRA
GRAFOS 16
Muitas aplicações práticas utilizam modelagem que utilizem determinados grafos, sobre os
quais serão implementados algoritmos para resolução de problemas específicos.
As duas estruturas de dados mais utilizadas para representação computacional de grafos são
as matrizes de adjacências e as listas de adjacências, descritas a seguir. Uma terceira forma,
menos utilizada é a matriz de incidências, que não será coberta neste estudo.
• Matriz de Adjacências:
Uma típica matriz de adjacências de um grafo G = (V, E) é uma matriz An×n definida como:
1 2 3 4 5 6 7 8 9 10
1 0 0 0 0 0 00 0 0 0
2 0 0 1 0 0 0
0 0 0 0
3 0 1 0 1 1 00 0 0 0
4 0 0 1 0 1 01 1 0 0
5 0 0 1 1 0 00 0 0 0
6 0 0 0 1 0 00 0 0 0
7 0 0 0 1 0 00 0 0 0
8 0 0 0 0 0 00 0 0 1
9 0 0 0 0 0 0 0 1 0 1
10 0 0 0 0 0 0 0 0 1 0
• Listas de Adjacências
Nesta estrutura, temos uma lista encadeada associada a cada vértice v. Esta lista contém nós
para todos os vértices adjacentes a ele. O uso de memória para representar “arestas inexistentes”
é evitado, o que não acontece na matriz de adjacências.
Temos então um balanço espaço versus desempenho, que deve ser avaliado para a escolha
da estrutura mais adequada a uma determinada aplicação.
EXERCÍCIOS 1.3
a) b)
4) Caracterize um grafo cuja matriz de adjacências tenha uma linha com todos os elementos
nulos. O que você pode dizer da lista de adjacências deste grafo?
Alguns problemas poder exigir uma modelagem que utilize extensões da definição usual de
um grafo simples. Em determinado problemas de otimização, pode ser necessário que a cada
aresta seja associado um peso (valor). Outras aplicações exigem que as arestas sejam orientadas
(modeladas como pares ordenados), indicando um sentido no percurso da aresta em questão.
• Digrafo
Um grafo direcionado (ou digrafo) G possui arestas orientadas. Uma aresta orientada é um
par ordenado de vértices distintos de G.
Desta forma, uma aresta orientada e será representada como e = (v,w), onde v,w ∈ V, e
v ≠ w. Neste caso, a aresta (v,w) possui uma única direção: do vértice v para o vértice w. Dizemos
que a aresta (v,w) é divergente de v e convergente a w.
• EXEMPLO 2
V = { a, b, c, d, e, f, g }
E = { (a,b), (a,c), (d,a), (d,g),
(g,e), (f,g), (e,f), (f,e) }
Se um vértice tem grau de entrada igual a ZERO, este vértice é chamado fonte. Já um vértice
cujo grau de saída seja ZERO é chamado sumidouro. No EXEMPLO 2, temos que o vértice d é uma
fonte, e os vértices b e c são sumidouros.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 20
a b c d e f g
a 0 1 0 0 0 0
1
b 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0
d 1 0 0 0 0 0 1
e 0 0 0 0 0 1 0
f 0 0 0 0 1 0 1
g 0 0 0 0 1 0 0
• Grafos Ponderados
Em um grafo ponderado, o peso (weight, em inglês) de uma aresta uv , denotado por será
atribuído ao seu respectivo elemento W[u][v] da sua matriz de adjacências.
v1 v2 v3 v4 v5 v6 v7
v1 ∞ 6 8 ∞ ∞ ∞ 7
v2 6 ∞ 9 ∞ ∞ ∞ ∞
v3 8 9 ∞ 12 10 ∞ ∞
v4 ∞ ∞ 12 ∞ 5 4 3
v5 ∞ ∞ 10 5 ∞ ∞ ∞
v6 ∞ ∞ ∞ 4 ∞ ∞ ∞
v7 7 ∞ ∞ 3 ∞ ∞ ∞
EXERCÍCIOS 1.4
in(A) = out(A) =
in(B) = out(B) =
in(C) = out(C) =
in(D) = out(D) =
in(E) = out(E) =
in(F) = out(F) =
Existe alguma fonte ou sumidouro no digrafo acima? Indique quais.
EM PASCAL: EM C:
Em C:
int GrauEntrada (int v)
{
int i, g; /* Variáveis locais */
Um caminho em um grafo é uma sequência de vértices tal que quaisquer dois vértices
consecutivos na sequência sejam adjacentes no grafo. Formalmente, um caminho em G(V,E) é
uma sequência P = u1, u2, … uk de elementos de V tal que, (ui, ui+1) ∈ E, para i = 1, 2, …, k-1.
v2,v3,v4,v5,v3,v4,v6 comprimento 6
v2,v3,v4,v3,v4,v6 comprimento 5
v2,v3,v4,v6 comprimento 3
v2,v3,v5,v4,v6 comprimento 4
1
Alguns autores utilizam os termos passeio (para caminho) e caminho (para caminho simples).
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 24
A distância entre dois vértices v e w, denotada por d(v,w), é definida como o comprimento
de um caminho mínimo entre eles. No grafo do EXEMPLO 1, a d(v2,v6) = 3, pois v2,v3,v4,v6 é um
caminho mínimo entre eles (verifique que não existe um caminho menor).
2
• Ciclo, ciclo simples
Dois ciclos são considerados idênticos se um deles puder ser obtido do outro através da
rotação de seus vértices ou pela inversão no sentido do percurso. Assim, observe que TEMOS APENAS
UM CICLO no grafo do EXEMPLO 1: C = <v3,v4,v5,v3>. Os ciclos <v4,v5,v3,v4>, <v5,v3,v4,v5>,
<v3,v5,v4,v3>, <v5,v4,v3,v5>, e <v4,v3,v5,v4> são todos idênticos ao ciclo C.
• Grafo conexo
Um grafo G = (V, E) é conexo se, para todo par de vértices v,w ∈ V, existe um caminho entre
v e w. Ou seja, temos todos os nós de um grafo conexo conectados por algum caminho possível.
Se existirem dois vértices quaisquer sem caminho entre eles, o grafo é dito desconexo. Por
exemplo, o grafo do EXEMPLO 1 é dito desconexo: não existe caminho entre os vértices v2 e v10.
Observe que a representação gráfica de um grafo desconexo é uma figura necessariamente
descontínua.
2
Alguns autores utilizam os termos passeio fechado (para ciclo) e ciclo (para ciclo simples).
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 25
os vértices do grafo. Um ciclo em que todos os vértices da origem até o penúltimo vértice formam
um caminho hamiltoniano é chamado ciclo hamiltoniano. Um grafo que possui algum ciclo
hamiltoniano é chamado grafo hamiltoniano.
Um caminho que contenha cada aresta do grafo exatamente uma vez é chamado caminho
euleriano. Um ciclo que contenha cada aresta do grafo exatamente uma vez é chamado ciclo
euleriano. Um grafo que possui um ciclo euleriano é chamado grafo euleriano.
Um grafo G admite algum caminho ou ciclo euleriano? Caso afirmativo, como identificá-los?
Um grafo G admite algum caminho ou ciclo hamiltoniano? Caso afirmativo, como identificá-los? A
primeira questão é mais simples, e pode ser respondida pelos teoremas a seguir. Identificar ciclos
ou caminhos hamiltonianos é um problema mais complexo.
• TEOREMA 1.4: Um grafo conexo é euleriano se e somente se todos os seus vértices possuem
grau par (nenhum vértice tem grau ímpar).
Veremos a seguir uma demonstração da parte ii, que se baseia em um algoritmo para a
obtenção de um ciclo euleriano para G conexo com todos os vértices de grau par. A prova
completa do teorema 1.4 será omitida.
Seja um grafo G, conexo e com todos os vértices de grau par. Certamente G possui um ciclo
C1 (por que?). Se tal ciclo possui todas as arestas do grafo, temos então um ciclo euleriano. Caso
contrário, remova de G todas as arestas em C1, e também os vértices que se tornarem isolados
após esta operação. O grafo resultante admite outro ciclo C2 (novamente: por que?). Repete-se o
processo: remove-se as arestas do ciclo encontrado (e vértices isolados), e procura-se novo ciclo,
removendo suas arestas e vértices isolados, até que não reste nenhuma aresta no grafo
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 26
resultante. Ao final, teremos k ciclos C1, C2, …, Ck. Pelo menos dois destes ciclos possuem um
vértice em comum, e podemos uni-los em um único ciclo. No conjunto de ciclos resultante,
repete-se o processo de união de ciclos com vértice em comum, até que tenhamos um único ciclo
resultante de todas as uniões, que certamente é um ciclo euleriano. Veja o exemplo a seguir.
Embora a prova do TEOREMA 1.5 seja omitida, verifique que o grafo da FIGURA 20 satisfaz este
teorema e não satisfaz o TEOREMA 1.4.
Pelo Teorema 1.2, sabemos que qualquer grafo contém uma QUANTIDADE PAR de vértices com
grau ímpar. Se esta quantidade for:
• ZERO: o grafo admite um ciclo euleriano;
• DOIS: o grafo admite um caminho euleriano, mas não um ciclo euleriano;
• QUALQUER OUTRO VALOR PAR: o grafo não admite caminho euleriano.
EXERCÍCIOS 2.1
1) Desenhe CINCO grafos não isomorfos com 10 vértices e 2-regulares (conexos ou desconexos).
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 27
11) Use os teoremas apropriados para provar se os grafos a seguir possuem ou não caminhos e
ciclos eulerianos. Nos casos possíveis, indique os caminhos e ciclos de Euler.
Tente também encontrar caminhos e ciclos hamiltonianos em cada um destes grafos.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 28
13) Das afirmativas abaixo sobre grafos não direcionados e não ponderados, são corretas:
a) Entre 1 e 50 arestas.
b) Entre 51 e 100 arestas.
c) Entre 101 e 150 arestas.
d) Entre 151 e 200 arestas.
e) Mais do que 200 arestas.
a) Apenas I.
b) Apenas II.
c) Apenas III.
d) Apenas 2 delas.
I. G1 é bipartido. e) Nenhuma delas.
II. G1 é euleriano.
III. G1 admite um caminho (não ciclo)
euleriano.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 29
1)
5) Resposta: n-1.
7)
b) A, B, D, G, C, E, F
c) O grafo não possui um ciclo hamiltoniano.
d) d(B,E) = 2
e) A, C, E, F comprimento 3
A, C, E, D, F comprimento 4
A, C, G, D, E, F comprimento 5
A, B, D, G, C, E, F comprimento 6
f) E, F, D, E
C, E, D, G, C
C, E, F, D, G, C
A, C, G, D, B, A
g) C, A, B, D, G, C, E, F, D, E.
h) Veja comentários sobre o TEOREMA 1.5.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 30
9) Todo grafo Kn, com n > 1 e ímpar, é euleriano (e apenas com n ímpar). (por que?)
Os conceitos relativos a caminhos e ciclos são análogos aos grafos não direcionados, apenas
devendo-se respeitar as direções das arestas. A única exceção é que, em um dígrafo, podemos ter
um ciclo de comprimento 2.
Caminho simples:
d,g,e,f comprimento 3
Ciclos simples:
f,g,e,f comprimento 3
e,f,e comprimento 2
Caminhos simples:
v1,v3,v5 comprimento 18
v1,v7,v4,v5 comprimento 15
Caminho simples:
d,g,e,f comprimento 21
Ciclos simples:
f,g,e,f comprimento 18
e,f,e comprimento 11
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 32
EXERCÍCIOS 2.2
A B C D E F
A _ _ _ _ _ _
B _ _ _ _ _ _
C _ _ _ _ _ _
D _ _ _ _ _ _
E _ _ _ _ _ _
F _ _ _ _ _ _
Os assuntos desta seção serão aplicados a grafos não ponderados, embora também se
apliquem a grafos ponderados.
• Subgrafos
Seja um grafo G = (V, E). Dizemos que G' = (V', E') é um subgrafo de G se V' ⊂ V e E' ⊂ E.
Neste caso, dizemos que G é um supergrafo de G'. Observe que o subgrafo G' pode não ter todos
os vértices e/ou arestas de G, mas não pode ter vértices e/ou arestas que não estejam em G. Um
possível subgrafo do EXEMPLO 1 é ilustrado a seguir.
(a) (b)
Se um G' é um subgrafo de G tal que V' = V, dizemos que G' é um subgrafo gerador de G.
Em outras palavras, um subgrafo gerador tem todos os vértices do supergrafo. Um possível
subgrafo gerador do EXEMPLO 1 é ilustrado a seguir.
(a) (b)
FIGURA 23 – UM SUBGRAFO GERADOR (a) DO GRAFO DO EXEMPLO 1 (b)
Se G' é um subgrafo de G tal que todas as arestas de G que unam vértices de G' também
aparecem em G', dizemos tal que G' é um subgrafo induzido de G. Mais precisamente, G' é um
subgrafo de G, induzido por V', quando ( ∀ v,w ∈ V' ) ( {v,w} ∈ E → {v,w} ∈ E' ). A figura a seguir
ilustra o subgrafo do EXEMPLO 1 induzido por V' = { v3,v4,v5,v6,v7,v8,v9 }.
(a) (b)
FIGURA 24 – UM SUBGRAFO (a) DO GRAFO DO EXEMPLO 1 (b), INDUZIDO POR { v3,v4,v5,v6,v7,v8,v9 }
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 34
• Componentes conexos
Seja G' um subgrafo conexo de G. Dizemos que G' é maximal (quanto à conectividade)
se G não admite nenhum outro subgrafo G" que contenha G' e também seja conexo. Observe a
FIGURA 25, representando subgrafo do EXEMPLO 1, ilustrados a seguir.
Na FIGURA 13, vemos quatro subgrafos de G. O subgrafo G1 é conexo, mas não maximal, pois
podemos adicionar vértices e/ou arestas de G em G1, obtendo outros subgrafos conexos de G. A
adição de {v3,v5} a G1 resulta no grafo G2, que é conexo. A adição de v2 e {v2,v3} a G1 resulta em G3,
que é conexo. G2 e G3 são supergrafos conexos de G1, obtidos por adição de vértices e/ou arestas
de G. Portanto, G1 não é subgrafo maximal quanto à conectividade. Na verdade, G2 e G3 também
são não maximais: ambos são subgrafos do G4, que é um subgrafo conexo e maximal de G.
Chamamos componentes conexos de G aos seus subgrafos conexos maximais. Temos então
outra definição para grafos conexos: grafo é dito conexo quando tem apenas um componente
conexo. O grafo G da FIGURA 26 é desconexo, pois tem três componentes conexos, ilustrados a
seguir.
O conjunto de vértices { C,D,F } desconecta o grafo, mas não é minimal (não sendo corte de
vértices), pois seu subconjunto { C,D } também o desconecta (este último é um corte de vértices).
Outro corte de vértices é o conjunto { E }, este de cardinalidade mínima 1.
O conjunto de arestas { AB, CE, DE } desconecta o grafo, mas não é minimal (não sendo corte
de arestas), pois seu subconjunto { CE, DE } também o desconecta. Os conjuntos { AC, BC, EC } e
{ CE, DE } são corte de arestas, este último de cardinalidade mínima: não existe outro corte de
arestas de menor cardinalidade.
Portanto, o grafo da FIGURA 27 acima tem conectividades de vértices e arestas dadas por
cV = 1 e cE = 2. Como exercício, desenhe os grafos resultantes da remoção de cada um dos cortes
de vértices e arestas considerados.
Um grafo é dito k-conexo em vértices quando cV ≥ k; ou seja, não existe corte de vértices
com menos do que k vértices. De forma análoga, um grafo k-conexo em arestas tem cV ≥ k, não
existindo corte com menos de k arestas. O grafo da FIGURA 15 é 1-conexo em vértices, 1-conexo
em arestas e 2-conexo em arestas (também chamado biconexo em arestas).
Uma importante desigualdade sobre conectividade: para todo grafo, cV ≤ cE (por que?). De
forma mais completa, sendo w um vértice de grau mínimo de G, temos cV ≤ cE ≤ d(w) (novamente,
por que?).
EXERCÍCIOS 2.3
3) Você consegue desenhar um grafo conexo 3-regular que tenha uma ponte?
4) Prove ou dê um contraexemplo. Se a aresta {v,w} é uma ponte então esta aresta é o único
caminho ente v e w.
6) Prove ou dê um contraexemplo. Todo grafo conexo que tem uma ponte também tem uma
articulação.
9) Seja G um grafo formado por um único ciclo simples contendo todos os seus vértices. Para
que valores de n, G é um grafo bipartido? Nestes casos, qual é o tamanho de um
emparelhamento máximo de G?
0 1 1 1 0 0
⎡1 0 0 1 0 0⎤
⎢ ⎥
⎢1 0 0 1 0 0⎥
⎢1 1 1 0 1 1⎥
⎢0 0 0 1 0 1⎥
⎣0 0 0 1 1 0⎦
2) cV = cE = n – 1
3)
6) A afirmação é correta.
9) Para todo valor n par. A cardinalidade do emparelhamento máximo, neste caso, é n/2.
2.4 PLANARIDADE
Uma representação de um grafo qualquer é dita uma representação plana quando não
existem arestas que se cruzem (apenas se encontram com outras arestas adjacentes nos vértices
em comum). Dizemos que G é um grafo planar se G admite uma representação plana. Por
exemplo, o K4 é um grafo planar (veja figuras (b) e (c) abaixo).
A prova deste teorema será omitida, e pode ser feita por indução sobre o número de
arestas.
• TEOREMA 1.7: Seja G um grafo planar e conexo, com n ≥ 3. Então são válidas as seguintes
desigualdades:
(a) m ≤ 3n – 6; e
(b) Se G não contém ciclo de comprimento 3, então m ≤ 2n – 4.
A prova deste teorema será omitida, e tem consequências importantes para determinarmos
se um grafo é planar, como veremos a seguir.
FIGURA 31 – G′ É SUBDIVISÃO DE G
EXERCÍCIOS 2.4
1) Desenhe uma representação plana para o grafo abaixo, ou prove que este grafo é não-planar.
2) Desenhe uma representação plana para o grafo abaixo, ou prove que este grafo é não-planar.
1)
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 42
Seja G = (V, E) um grafo qualquer, e C = { c1, c2, c3, … cp } um conjunto de p cores distintas.
Uma coloração de G é conjunto de atribuições destas cores aos vértices de G, de forma que
vértices adjacentes tenham cores distintas. Formalmente, uma coloração é uma função
Uma k-coloração de G é uma coloração que utiliza k cores; ou seja, o conjunto imagem da
função cor tem cardinalidade k. Neste caso, dizemos que G é k-colorível. Observe que todo grafo é
n-colorível. Basta pegarmos uma cor distinta para cada vértice de G. Mas o objetivo é utilizarmos o
menor número possível de cores.
O número cromático de G, notado por χ(G), é o valor mínimo de k para o qual o grafo G é
k-colorível. Qualquer coloração com χ(G) cores é chamada coloração mínima. A figura abaixo
mostra um grafo G que admite uma 3-coloração. Pode-se verificar facilmente que esta coloração é
mínima. Desta forma, χ(G) = 3.
C c1
B H D c2 c3 c2
G c1
A F E c3 c1 c3
A prova do LEMA 1.1 é bastante simples. Seja G um grafo bipartido, sendo V = V1 ∪ V2 tal que
vértices de uma mesma partição não são adjacentes. Podemos então escolher duas cores, uma
para colorir os vértices de V1, e outra para colorir os vértices de V2. Reciprocamente, se um grafo é
bicolorível, então podemos particionar V em subconjuntos de vértices de mesma cor. Como
vértices de mesma cor não são adjacentes, temos que G é um grafo bipartido.
O Teorema das Quatro Cores diz que é possível colorir as regiões de qualquer mapa
desenhado no plano (que pode ser modelado como um grafo planar) usando no máximo quatro
cores, de forma que regiões adjacentes sejam de cores distintas. A FIGURA 20 abaixo ilustra um
mapa com 5 regiões, e seu respectivo grafo, que é 4-colorível, como mostrado. O problema das
quatro cores relaciona os estudos de COLORAÇÃO e PLANARIDADE em grafos.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 43
EXERCÍCIOS 2.5
1) Determine χ(G) para o grafo G abaixo. Prove que o valor χ(G) está correto:
(a) Mostre uma χ(G)-coloração para o grafo; e
(b) Prove que esta coloração é mínima.
4) Seja G um grafo composto apenas por um ciclo simples contendo todos os seus vértices. Qual
é o número cromático de G?
5) Determine χ(G) para todos os grafos abaixo. Mostre a χ(G)-coloração de cada um deles.
NOTAS DE AULA – PROF. JÚLIO SILVEIRA
GRAFOS 44
6) Determine o número cromático do grafo abaixo. Apresente uma coloração para este valor.
1) χ(G) = 3
a) b)
G contém um ciclo de comprimento ímpar (A,B,C,D,E,A).
Portanto, pelo TEOREMA 1.3, G não é bipartido.
7) a)
8) c)
9) c)
10) d)
11) b)