Você está na página 1de 39

Universidade Federal Rural de Pernambuco

Departamento de Matemática

VII Semana da Matemática

Introdução à Teoria dos Grafos


(Notas de Minicurso)

Prof. MSc. Sansuke Watanabe

Recife, outubro de 2008


c 2007 by Sansuke Watanabe
Copyright ,
Todos os direitos reservados ao autor

Notas de Minicurso:
Introdução à Teoria dos Grafos

Autor:
Sansuke Watanabe
Professor Assistente, Universidade Federal Rural de Pernambuco
Unidade Acadêmica de Garanhuns
Av. Bom Pastor, s/n, Boa Vista
Garanhuns-PE, Brasil
CEP:55.292-901
E-mail: sansuke@uag.ufrpe.br

Projeto gráfico e ilustrações:


Sansuke Watanabe

Garanhuns-PE
Ao meu ainda pequeno Pedro Henrique
a quem o universo ilimitado
de onde provêm estas poucas linhas
escritas hoje por seu pai
possa, quem sabe um dia, interessar.
Apresentação

Estas notas breves foram elaboradas como texto de apoio ao minicurso


com carga horária de 5 horas, intitulado Introdução à Teoria dos Grafos
que é parte das atividades da I JUAG - Jornada Universitária da Unidade
Acadêmica de Garanhuns - UFRPE. O público a quem se destina são,
principalmente, alunos de graduação dos cursos das Ciências Agrárias
e demais congressistas interessados no tema. De qualquer maneira,
acredita-se que o público esperado aprecie e utilize os aspectos mais
aplicados da Matemática, tendo esta como um instrumento de apoio em
seus estudos e pesquisas e não como um fim em si mesmo.
Dessa forma, este minicurso possui um caráter apenas informativo
sobre a existência dessa área da Matemática e algumas dentre as suas
inúmeras possibilidades de aplicação. Por isso, foi planejado para, tão
somente, apresentar os conceitos básicos do assunto, alguma notação e
uma reduzida parte do vocabulário especı́fico da área. Sob nenhuma
hipótese, nem o minicurso e tampouco estas notas têm a pretensão de
aprofundar ou esgotar quaisquer dos temas abordados. Espera-se apenas
que o estudante ou pesquisador participante possa identificar aspectos
conceituais que, eventualmente, estejam alinhados com suas áreas de
trabalho e, por isso, possam tornar-se interessados em utilizar a Teoria
dos Grafos para modelar situações aplicadas.
A estas notas couberam apenas a finalidade de evitar ou minimizar
a cópia manuscrita dos conceitos e resultados expostos no quadro ou
projetados. Por isso, o texto é conciso e apenas pontua alguns dos
tópicos abordados durante o minicurso. Assim, registram apenas os
pontos básicos e remetem o eventual interessado a fontes completas,
listadas nas referências.

Sansuke Watanabe
sansuke@uag.ufrpe.br
Garanhuns, outubro de 2007.

2
Conteúdo

1 O Conceito de Grafo 5

2 Conceitos Básicos 7
2.1 Definições iniciais . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Grau de um vértice . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Isomorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Caminhos 11
3.1 Definição de caminho . . . . . . . . . . . . . . . . . . . . . 11
3.2 Tipos de caminhos . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Teoremas de Euler . . . . . . . . . . . . . . . . . . . . . . 13
3.4 Distância entre vértices . . . . . . . . . . . . . . . . . . . 13

4 Conexidade 15
4.1 Grafo conexo . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 Componentes conexas . . . . . . . . . . . . . . . . . . . . 15

5 Grafos Especiais 18
5.1 Grafo bipartido . . . . . . . . . . . . . . . . . . . . . . . . 18
5.1.1 Grafo bipartido completo . . . . . . . . . . . . . . 18
5.2 Árvores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2.1 Árvore geradora . . . . . . . . . . . . . . . . . . . 20
5.2.2 Árvore binária . . . . . . . . . . . . . . . . . . . . 20

6 Estrutura de Dados e Algoritmos 21


6.1 Matriz de incidência . . . . . . . . . . . . . . . . . . . . . 21
6.2 Matriz de adjacência . . . . . . . . . . . . . . . . . . . . . 22
6.3 Algoritmo de Busca em Largura . . . . . . . . . . . . . . 23
6.3.1 Caracterização do algoritmo . . . . . . . . . . . . . 23
6.3.2 Descrição do algoritmo . . . . . . . . . . . . . . . . 23
6.4 Algoritmo Ambicioso . . . . . . . . . . . . . . . . . . . . . 24
6.4.1 Função peso . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2 Caracterização do algoritmo . . . . . . . . . . . . . 25
6.4.3 Descrição do algoritmo . . . . . . . . . . . . . . . . 25

3
4

7 Digrafos 26
7.1 Grafo dirigido . . . . . . . . . . . . . . . . . . . . . . . . . 26
7.2 Matriz de adjacência de um digrafo . . . . . . . . . . . . . 27
7.3 Caminhos dirigidos de comprimento r . . . . . . . . . . . 28
7.4 Torneios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

8 Fluxo em Redes 30
8.1 Graus de entrada e saı́da . . . . . . . . . . . . . . . . . . . 30
8.2 Capacidade e fluxo . . . . . . . . . . . . . . . . . . . . . . 31
8.3 Valor do fluxo e cortes . . . . . . . . . . . . . . . . . . . . 32
8.4 Teorema de Ford-Fulkerson (Fluxo máximo) . . . . . . . . 34
Capı́tulo 1

O Conceito de Grafo

......................................................................

Podemos dizer, sob uma primeira abordagem informal, que um grafo é


um diagrama formado por pontos e linhas que unem esses pontos. Nesse
caso, dizemos que os pontos são vértices (ou nós) e que as linhas são as
arestas. A ilustração abaixo representa um grafo tı́pico.

Figura 1.1: Grafo tı́pico.

Neste exemplo, os vértices do grafo formam o conjunto V = {1, 2, 3, 4,


5, 6, 7} e as arestas o conjunto E = {a, b, c, d, e, f, g, h, i, j, k}. Note que
tanto V como E são conjuntos finitos e suas cardinalidades são, respecti-
vamente, |V | = 7 e |E| = 11. Além disso, dizemos que uma aresta e ∈ E
é incidente a um vértice v ∈ V quando e está ligada a v. Por exem-
plo, a aresta g da figura é incidente ao vértice 3, bem como ao vértice
6. Ainda por inspeção do grafo da figura (1.1) podemos relacionar as
seguintes observações:

1. Um vértice não necessariamente precisa estar conectado a outro


vértice por alguma aresta. Note que o vértice 7 não possui aresta
incidente e, portanto, não está conectado a nenhum outro vértice.

5
O Conceito de Grafo 6

Nesse caso, é dito isolado. Assim, faz sentido falar em vértices sem
aresta.

2. Ao contrário da observação anterior, não faz sentido falar em aresta


sem vértice. De fato, uma aresta ou liga dois vértices distintos ou
liga um vértice a si mesmo. No primeiro caso, quando a aresta
e liga os vértices u e v dizemos que estes estão conectados pela
aresta e. Assim, a aresta c conecta os vértices 1 e 2. No segundo
caso, quando uma aresta e conecta um vértice a si mesmo, dizemos
que e é um laço. Neste grafo, temos que a aresta d é do tipo laço,
pois conecta o vértice 2 a si próprio.

3. Dois vértices podem estar conectados por mais de uma aresta. No


grafo acima, as arestas a e b conectam os mesmos vértices 1 e 6.
Por isso, são ditas arestas múltiplas ou em paralelo.

4. Quando um grafo possui laços ou arestas em paralelo recebe o


nome de multigrafo. Caso contrário, é dito grafo simples. Assim,
observamos que o grafo da figura (1.1) é, de fato, um multigrafo.

Desde que sejam conhecidos o conjunto V de vértices e o conjunto E


de arestas, uma outra maneira de representar as incidências de arestas
em vértices nos grafos como o acima é através do seguinte conjunto de
pares ordenados I = {(1, a), (6, a), (1, b), (6, b), (1, c), (2, c), (2, d), (2, e),
(6, e), (2, f ), (3, f ), (3, g), (6, g), (6, h), (5, h), (3, i), (5, i), (3, j), (4, j),
(4, k), (5, k)}. Assim, quanto a este conjunto I de pares ordenados,
observamos os seguintes fatos:

1. O conjunto I é um subconjunto do produto cartesiano V × E.


Logo, por definição, I é uma relação entre os conjuntos V e E.
Neste caso, é dita uma relação de incidência.

2. Uma vez fixada qualquer uma das arestas do grafo, digamos a


aresta b, então o conjunto {(1, b), (6, b)} é o subconjunto de I
constituı́do pelos pares ordenados da forma (v, b) tal que v ∈ V .
É importante observar que |{(1, b), (6, b)}| = 2 pois isto significa
que uma aresta só pode ser incidente a, no máximo, dois vértices.
Quando a aresta é um laço, como a aresta d do grafo acima, então
|{(2, d)}| = 1, ou seja, a aresta d é incidente a apenas um vértice.

Uma vez construı́do esse primeiro conceito ilustrativo de um grafo,


apresentamos na seqüência sua definição e novos conceitos com uso da
notação formal necessária ao devido tratamento do assunto.
Capı́tulo 2

Conceitos Básicos

......................................................................

2.1 Definições iniciais

De modo geral, dizemos que um grafo é uma tripla G = (V, E, I), onde
V e E são conjuntos finitos e I ⊂ V × E é uma relação que satisfaz a
condição:

|{v ∈ V ; (v, e) ∈ I}| ∈ {1, 2} (2.1)


para todo e ∈ E. Dizemos que V é o conjunto dos vértices de G e
denotamos por V (G), E é o conjunto das arestas de G, denotado por
E(G), e I é a relação de incidência entre as arestas e vértices de G
denotada por I(G).

Uma aresta e ∈ E(G) é dita incidende a um vértice v ∈ V (G) quando


(v, e) ∈ I. Também, dois vértices distintos u, v ∈ V (G) são adjacentes
quando existe e ∈ E(G) tal que {(u, e), (v, e)} ⊂ I. Neste caso, dizemos
que a aresta e liga os vértices u e v ou que estes são os vértices terminais
da aresta e. Duas arestas e 6= f são ditas adjacentes quando existe
v ∈ V (G) tal que {(v, e), (v, f )} ⊂ I. Neste caso, dizemos que v é um
vértice comum às arestas e e f .

A condição (2.1) diz que para cada artesta e ∈ E(G), a cardinali-


dade do conjunto dos vértices v ∈ V (G) para os quais o par ordenado
(v, e) ∈ I(G) somente pode ser dois ou um. Quando essa cardinalidade
é igual a dois significa que a aresta liga dois vértices distintos. Quando
|{v ∈ V ; (v, e) ∈ I}| = 1, dizemos que e é um laço.

7
Conceitos Básicos 8

Dizemos que G0 é um subgrafo de G quando V (G0 ) ⊂ V (G) e E(G0 ) ⊂


E(G). Neste caso, usamos a notação G0 ⊂ G. Abaixo, ilustramos um
grafo G e um seu subgrafo G0 .

Figura 2.1: Um grafo e um seu possı́vel subgrafo.

Um grafo é dito completo quando cada um de seus vértices está


ligado a todos os outros, ou seja, para cada par de vértices u, v ∈ V (G)
existe uma aresta e ligando u a v. Um grafo completo com n vértices é
denotado por Kn . A figura abaixo ilustra o K6 .

Figura 2.2: Ilustração do K6 .

Seja G um grafo com n vértices. Nesse caso, dezemos que G é o


grafo complementar de G quando V (G) = V (G) e as arestas de G são
tais que:

i) E(G) ∪ E(G) = E(Kn )

ii) E(G) ∩ E(G) = ∅

Isto significa que as arestas de G são aquelas que faltam a G para este
tornar-se um grafo completo. Ilustramos a seguir um grafo G e seu
complementar G.
Conceitos Básicos 9

Figura 2.3: Um grafo G e seu complementar G.

2.2 Grau de um vértice

Definimos o grau de um vértice v ∈ V (G), denotado por dG (v), como


o número de arestas incidentes a v. Note que se v possui um laço,
então este é contado duas vezes para efeito de totalização das arestas
incidentes. Além disso, dizemos que um vértice v ∈ V (G) é isolado
quando dG (v) = 0.

Teorema 2.2.1 A soma dos graus dos vértices de um grafo G é sempre


igual do dobro do número de suas arestas, ou seja,
X
d(v) = 2|E(G)|.
v∈V (G)

Demonstração: uma aresta ou liga dois vértices distintos ou é um


laço. Em qualquer dos casos, a sua contribuição para contagem dos
graus é sempre igual a dois. 

Corolário 2.2.1 Em qualquer grafo G, o número de vértices com grau


ı́mpar é sempre par. 

Dizemos que um grafo G é regular quando todos os seus vértices


possuem o mesmo grau, ou seja, d(v) = k para todo v ∈ V (G). Nesse
caso, o grafo é dito k-regular. Note que todo grafo completo é regular,
mas não vale a recı́proca.

Figura 2.4: Um grafo 3−regular.


Conceitos Básicos 10

2.3 Isomorfismo

Dizemos que dois grafos G e H são isomorfos quando existem bijeções


f : V (G) → V (H) e g : E(G) → E(H) tais que (v, e) ∈ I(G) se e
somente se (f (v), g(e)) ∈ I(H). Ou seja, se v e e são incidentes em G,
então f (v) e g(e) também serão incidentes em H. Quando dois grafos
são isomorfos significa que podem apresentar diferentes representações
gráficas, entretanto são, a rigor, o mesmo grafo. Isto é, os vértices,
arestas e ligações entre eles são preservados. Ilustramos abaixo dois
grafos isomorfos.

Figura 2.5: Grafos isomorfos.


Capı́tulo 3

Caminhos

......................................................................

3.1 Definição de caminho

Definimos um caminho γ em um grafo G como uma seqüência finita de


vértices e arestas da forma
γ : v0 , e1 , v1 , e2 , v2 , · · · , vn−1 , en , vn
onde
i) v0 , v1 , · · · , vn é uma seqüência de n + 1 vértices vi ∈ V (G) não
necessariamente distintos;
ii) e1 , e2 , · · · , en é uma seqüência de n arestas ei ∈ E(G) não neces-
sariamente distintas;
iii) {(vi−1 , ei ), (vi , ei )} ⊂ I para todo i ∈ {1, 2, · · · , n}, ou seja, a
aresta ei liga os vértices vi−1 a vi .
Assim, dizemos que γ é um v0 vn -caminho de comprimento |γ| = n
que inicia em v0 e termina em vn . Neste caso, v0 e vn são ditos os vértices
terminais de γ ou, similarmente, que o caminho γ liga os vértices v0 e
vn . Note que o comprimento de um caminho coincide com o número de
arestas que dele participam.

3.2 Tipos de caminhos

Um caminho é dito simples quando não repete vértices, ou seja, vi 6= vj


para todo i 6= j, com i, j ∈ {0, 1, · · · , n}. Isto significa que os vértices
v0 , v1 , · · · , vn que fazem parte do caminho são distintos dois a dois. Note
que se um caminho não repete vértices, então, necessariamente, não
repete arestas.

11
Caminhos 12

Figura 3.1: Um caminho simples.

Um caminho é um ciclo quando v0 = vn , isto é, começa e termina


no mesmo vértice. Um ciclo pode, eventualmente, repetir arestas ou
vértices intermediários.

Em particular, dizemos que um ciclo é um circuito quando vi 6= vj


para todo subconjunto {i, j} ⊂ {0, 1, 2, · · · , n} com {i, j} = 6 {0, n}, ou
seja, os seus vértices são distintos dois a dois, exceto os vértices terminas
v0 = vn . Além disso, em um circuito as arestas também são duas a duas
distintas, já que não há repetições de vértices internos.

Figura 3.2: Exemplo de circuito.

Um ciclo euleriano é um ciclo que percorre todas as arestas do


grafo uma e somente uma vez. Em um ciclo euleriano é possı́vel que
ocorram repetições de vértices. Mais ainda, o conjunto das arestas
e1 , e2 , · · · , en que participam de um ciclo euleriano é o próprio conjunto
E(G) = {e1 , e2 , · · · , en }.

Um caminho euleriano é um caminho que percorre todas as arestas


do grafo apenas uma vez, mas sem exigir que seja um ciclo, isto é, pode
ocorrer v0 6= vn .

Um circuito é hamiltoniano quando passa por todos os vértices do


grafo apenas uma vez. Um grafo que possui um tal circuito é dito
grafo hamiltoniano. Apresentamos abaixo um exemplo de um grafo com
circuito hamiltoniano destacado em negrito. Perceba que tal circuito
não necessariamente utiliza todas as arestas do grafo.
Caminhos 13

Figura 3.3: Grafo hamiltoniano.

3.3 Teoremas de Euler

Apresentamos os dois teoremas de Euler, publicados em 1736, que re-


solvem o Problema das 7 Pontes de Königsberg.

Teorema 3.3.1 (Euler, 1736): Se G é um grafo conexo, então são


equivalentes as seguintes afirmações:

i) Existe um ciclo euleriano em G;

ii) Todos os vértices v ∈ G possuem grau par. 

Este teorema afirma que se G é um grafo cujos vértices possuem sempre


grau par, então existe um ciclo euleriano começando e terminando em
qualquer um dos vértices v ∈ G.

Teorema 3.3.2 (Euler, 1736): Se G é um grafo conexo, então são


equivalentes as seguintes afirmações:

i) G possui um caminho euleriano;

ii) G possui no máximo dois vértices com grau ı́mpar. 

Este teorema estabelece que para um grafo G possuir um caminho eule-


riano não pode ter mais que dois vértices com grau ı́mpar. Neste caso,
o caminho euleriano inicia em um dos vértices de grau ı́mpar e termina
no outro.

3.4 Distância entre vértices

O conceito de caminho permite definir uma métrica em um grafo através


do conceito de distância entre dois vértices. Assim, dado um grafo G, se-
jam u, v ∈ V (G) dois vértices quaisquer. Definimos a distância dG (u, v)
entre dois vértices u e v em G como o caminho de menor comprimento
Caminhos 14

entre eles. Isto é, seja C o conjunto de todos os uv-caminhos γ em G.


Então,
dG (u, v) = min{|γ|; γ ∈ C}.
Quando não existe um uv-caminho em G, dizemos que d(u, v) = ∞.
Além disso, o conceito de distância entre dois vértices é, de fato, uma
métrica. Com efeito, valem as propriedades:

i) d(u, v) ≥ 0

ii) d(u, v) = 0 ⇔ u = v

iii) d(u, v) = d(v, u)

iv) d(u, v) + d(v, w) ≥ d(u, w).


Capı́tulo 4

Conexidade

......................................................................

4.1 Grafo conexo

Dizemos que um grafo G é conexo quando sempre existe um caminho


ligando quaisquer dois de seus vértices, ou seja, se u, v ∈ V (G), então
existe um uv-caminho. Abaixo, apresentamos o Grafo de Peterson P5
como exemplo de grafo conexo.

Figura 4.1: P5 (Grafo de Peterson).

Dizemos que um grafo é desconexo quando não é conexo. Neste caso,


decorre a definição de componentes conexas, apresentada a seguir.

4.2 Componentes conexas

No caso geral, seja G um grafo e V (G) o conjuntos de seus vértices.


Podemos estabelecer nos elementos de V (G) a seguinte relação: u ∼ v
se e somente se existe um uv-caminho. Afirmamos que esta relação é de
equivalência. De fato,

15
Conexidade 16

i) Temos que a relação é reflexiva, pois v ∼ v, para todo v ∈ V (G)


uma vez que sempre existe o vv-caminho trivial γ : v.

ii) A relação também é simétrica, pois se u ∼ v, então existe um uv-


caminho γ. Isso implica que existe um vu-caminho −γ e, portanto,
v ∼ u.

iii) Por último, a relação é transitiva, pois se u ∼ v e v ∼ w, existem


um uv-caminho γ1 e um vw-caminho γ2 . Nesse caso, seja γ =
γ1 ∪ γ2 . Obviamente, γ é um uw-caminho. Logo, u ∼ w.

Esta relação de equivalência em V (G) determina o conjunto-quociente:

V (G)/∼ = {V1 , V2 , · · · , Vn }

onde cada classe de equivalência Vi é dita uma componente conexa de G.


Portanto, essas componentes V1 , V2 , · · · , Vn determinam uma partição de
V (G). Logo, não existe aresta e ∈ E(G) ligando vértices pertencentes
a diferentes Vi0 s. Com efeito, suponha que existisse uma tal aresta e
ligando os vértices u ∈ Vi e v ∈ Vj , com i 6= j. Nesse caso, γ : uev seria
um uv-caminho, uma contradição, pois, por hipótese, u e v pertencem a
componentes conexas distinas. Claramente, um grafo é conexo quando
possui apenas uma componente conexa. Abaixo, ilustramos um grafo G
formado por 3 componentes conexas V1 , V2 e V3 .

Figura 4.2: Um grafo G e suas componentes conexas V1 , V2 e V3 .

Se um grafo G é conexo, então uma aresta e ∈ E(G) é dita uma


ponte quando não pertence a algum circuito de G. Em consequência,
a remoção de uma ponte e desconecta o grafo G em duas componentes
conexas. Ou seja, o grafo G − e é desconexo. As figuras seguintes
ilustram uma ponte e em um grafo conexo G e o grafo desconexo G − e
com a retirada da ponte e.
Conexidade 17

Figura 4.3: Um grafo G conexo com uma ponte e.

Figura 4.4: O grafo desconexo G − e.

Dizemos que um grafo conexo G é k−conexo quando existe um


número mı́nimo de k arestas que se removidas desconectam o grafo.
O grafo da figura abaixo é 3−conexo. Note que é necessária a remoção
de um número mı́nimo de 3 arestas para desconectar este grafo. Ele
ficará desconexo se forem retiradas, por exemplo, o conjunto de arestas
{a, b, c}.

Figura 4.5: O grafo conexo G e o desconexo G − {a, b, c} pela retirada das arestas.
Capı́tulo 5

Grafos Especiais

......................................................................

5.1 Grafo bipartido

Um grafo G é bipartido quando existe uma partição (A, B) de V (G) tal


que toda aresta e ∈ E(G) liga sempre um vértice u ∈ A a um vértice
v ∈ B. Isso equivale a dizer que não existem arestas ligando dois vértices
em A ou em B.

Figura 5.1: Um grafo bipartido com partição (A, B).

Observamos que um grafo bipartido não possui circuito de compri-


mento ı́mpar, pois como toda aresta liga vértices dos conjuntos disjuntos
da partição, então qualquer circuito deve alternar vértices de A e B de-
vendo ter, necessariamente, comprimento par. Em particular, um grafo
bipartido não possui triângulos.

5.1.1 Grafo bipartido completo


Quando o grafo G é bipartido e todo vértice de A está ligado a todo
vértice de B, dizemos que o grafo é bipartido completo e denotamos esse

18
Grafos Especiais 19

grafo por Km,n , onde m = |A| e n = |B|. A figura abaixo ilustra o K3,4 .

Figura 5.2: O grafo bipartido completo K3,4 .

5.2 Árvores

Um árvore é um grafo conexo sem circuitos. Isso significa que uma árvore
é um grafo minimalmente conexo, isto é, a remoção de qualquer uma de
suas arestas desconecta o grafo. Logo, em uma árvore, toda aresta é uma
ponte e, em particular, toda árvore T é um grafo 1−conexo, embora a
recı́proca não seja verdadeira.

Figura 5.3: Uma árvore T .

As propriedades que carcterizam uma árvore estão reunidas no seguinte


enunciado:

Teorema 5.2.1 Se T é um grafo, então são equivalentes:

i) T é uma árvore;

ii) Quaisquer dois vértices de T são ligados por um único caminho


simples;

iii) T é minimalmente conexo. 

Decorrem da definição algumas propriedades das árvores. Primeiro,


uma árvore não possui laços nem arestas em paralelo. Também, se uma
árvore possui um vértice com grau n, então possui pelo menos n vértices
de grau 1. Além disso, se T é uma árvore, então |V (T )| = |E(T )| + 1.
Grafos Especiais 20

Os vértices v de uma árvore T tais que d(v) = 1 são ditos os vértices


terminais de T . Finalmente, observamos que toda árvore é um grafo
bipartido.

5.2.1 Árvore geradora


Dizemos que T é uma árvore geradora de um grafo conexo G quando
V (T ) = V (G), ou seja, T possui como vértices os mesmos vértices de G.
Observamos que um grafo conexo G pode admitir mais de uma árvore
geradora. Isto é, se T é árvore geradora de G, então não necessariamente
é única.

Figura 5.4: Um grafo G e uma árvore geradora T .

5.2.2 Árvore binária


Uma árvore T é dita binária quando cada vértice está ligado a dois
outros, com excessão dos vértices terminais. Existe um vértice v0 di-
ferenciado chamado vértice raiz tal que d(v0 ) = 2. Existem vértices v
intermediários com d(v) = 3 e os vértices terminais com grau um. As
árvores binárias são um recurso de grande utilidade em programação de
computadores. Operações aritméticas, por exemplo, são calculadas por
caminhamentos em árvores binárias.

Figura 5.5: Uma árvore binária.


Capı́tulo 6

Estrutura de Dados e Algoritmos

......................................................................

6.1 Matriz de incidência

Seja G um grafo com conjunto de vértices V (G) = {v1 , v2 , · · · , vm },


conjunto de arestas E(G) = {e1 , e2 , · · · , en } e relação de incidência I.
Definimos a matriz de incidência B do grafo G como

B = (bij )m×n

onde bij = 1 se (vi , ej ) ∈ I, ou seja, se a aresta ej for incidente ao


vértice vi e bij = 0 caso contrário. Por exemplo, para grafo G abaixo
com |V (G)| = 6 e |E(G)| = 8,

Figura 6.1: Um grafo G com 6 vértices e 8 arestas.

a matriz de incidência associada é a seguinte matriz B do tipo 6 × 8:

21
Estrutura de Dados e Algoritmos 22

1 0 0 0 0 0 0 1
 

 0 1 1 0 0 0 0 1 

 0 0 1 1 1 1 0 0 
B=  

 0 0 0 0 0 1 1 0 

 0 0 0 0 1 0 1 1 
1 1 0 1 0 0 0 0 6×8
Note que o grau de um vértice vi é dado por
n
X
d(vi ) = bik
k=1

ou seja, a grau do vértice vi é a soma das entradas da i-ésima linha da


matriz de incidência B.

6.2 Matriz de adjacência

Seja G um grafo com conjunto de vértices V (G) = {v1 , v2 , · · · vn }. Defi-


nimos a matriz de adjacência A de um grafo simples G com n vértices
como
A = (aij )n×n
onde, aij = 1 se existe uma aresta e ∈ E(G) incidente aos vértices i e
j e aij = 0, caso contrário. Abaixo, exemplificamos um grafo G e sua
matriz de adjacência A correspondente.

Figura 6.2: Um grafo G com 8 vértices.

0 1 0 1 1 0 0 0
 

 1 0 1 0 0 1 0 0 


 0 1 0 1 0 0 1 0 

 1 0 1 0 0 0 0 1 
A=  

 1 0 0 0 0 0 1 0 


 0 1 0 0 0 0 0 1 

 0 0 1 0 1 0 0 0 
0 0 0 1 0 1 0 0 8×8
Estrutura de Dados e Algoritmos 23

Note que a matriz de adjacência de um grafo é sempre simétrica.


De fato, se o vértice i está ligado ao vértice j por uma aresta, então
o inverso também é verdadeiro, ou seja, aij = aji = 1. Devido a essa
simetria, o grau de um vértice vi relaciona-se com a matriz de adjacência
através da seguinte igualdade:
n
X n
X
d(vi ) = aik = aki
k=1 k=1

isto é, o grau d(vi ) é igual a soma das entradas da i-ésima linha ou
coluna da matriz de adjacência A.

A representação de um grafo por sua matriz de adjacência é uma


forma apropriada para efeitos computacionais. Entretanto, quando o
grafo possui poucas arestas, a matriz terá muitas entradas nulas. Nesse
caso, tal recurso subutiliza muito espaço de memória e tempo de proces-
samento. Portanto, na prática, torna-se mais adequada a representação
de grafos através de listas. Esta estrutura de dados é mais eficiente
porque armazena apenas as informações relevantes.

6.3 Algoritmo de Busca em Largura

6.3.1 Caracterização do algoritmo


Seja G um grafo e v ∈ V (G). O algoritmo de busca em largura inicia no
vértice v e a partir dele encontra uma árvore geradora T da componente
conexa que contém v de tal modo que se w é um vértice de T , w 6= v,
então dT (v, w) = dG (v, w). Ou seja, a partir de v a árvore alcança todos
os outros vértices w ∈ V (G) = V (T ) seguindo um caminho simples de
menor comprimento.

Operacionalmente, o algoritmo inicia no vértice v, dito vértice raiz, e,


num primeiro estágio, visita todos os vértices filhos de v, isto é, aqueles
vértices diretamente ligados a v ou que estão a uma aresta de distância
deste. Num segundo estágio, visita todos os vértices netos de v, ou seja,
aqueles que estão a duas arestas de distância de v e assim sucessivamente
até atingir todos os vértices da componente conexa.

6.3.2 Descrição do algoritmo


Entrada:

(1) Um grafo G;

(2) Um vértice v ∈ G.
Estrutura de Dados e Algoritmos 24

Saı́da:

(1) Uma árvore geradora T = (V, A) para a componente conexa que


contém v, definida por um conjunto de vértices V = V (G) e um
conjunto de arestas A ⊂ E(G);

(2) Uma função h : V (T ) → N tal que h(w) = dG (v, w).

......................................................................

Pseudocódigo:

(1) Criar uma lista vazia L;

(2) Atribuir h(w0 ) = −1, para todo w0 ∈ V (G);

(3) Atribuir h(v) = 0, V = {v}, L : v e A = ∅;

(4) Se w é o vértice inicial da lista L, ent~


ao para cada aresta
e incidente a w tal que e liga w a w com h(w0 ) = −1 faça:
0

V = V ∪ {w0 };
A = A ∪ {e};
h(w0 ) = h(w) + 1;
Adicione w0 no final da lista L;
ao existirem mais arestas e, retire w da lista;
Quando n~

(5) Repita o passo (4) enquando a lista L n~


ao for vazia.

......................................................................

6.4 Algoritmo Ambicioso

6.4.1 Função peso


Seja G um grafo com conjunto de arestas E(G). Uma função peso em
G é uma função p : E(G) → R definida nas arestas do grafo que a cada
aresta e ∈ E(G) associa o peso p(e). Em particular, se T é uma árvore
geradora de G, então a função peso dessa árvore é a restrição

p : E(G)/E(T ) → R.

Neste caso, definimos o peso da árvore T como


X
p(T ) = p(e).
e∈E(T )
Estrutura de Dados e Algoritmos 25

6.4.2 Caracterização do algoritmo


Em geral, dado um grafo conexo G pode existir mais de uma árvore ge-
radora associada. Quando existe uma função peso nas arestas de G, tais
árvores geradoras podem ter diferentes pesos. O algoritmo ambicioso,
partindo de um vértice árbitrário v ∈ V (G), encontra uma árvore ge-
radora de peso máximo ou mı́nimo, dependendo da natureza da função
peso definida nas arestas e ∈ E(G).

6.4.3 Descrição do algoritmo


Entrada:

(1) Um grafo conexo G;

(2) Uma função peso p : E(G) → R.

Saı́da:

• Uma árvore geradora T = (V, A) do grafo G com peso máximo (ou


mı́nimo), onde V = V (G) e A ⊂ E(G).

......................................................................

Pseudocódigo:

(1) Escolha v ∈ V (G) e faça V = {v} e A = ∅;

(2) Escolha uma aresta e ∈ E(G) de maior (ou menor) peso ligando
um vértice do conjunto V a um vértice w 6∈ V e faça:
V = V ∪ {w} e A = A ∪ {e};

(3) Repita o passo (2) enquanto V 6= V (G). Caso contrário,


T = (V, A) é a árvore geradora com peso máximo (ou mı́nimo)
procurada.

......................................................................
Capı́tulo 7

Digrafos

......................................................................

7.1 Grafo dirigido

Um digrafo ou grafo dirigido é um grafo simples cujas arestas possuem


um sentido de orientação. Tais grafos são adequados para modelar
relações entre os elementos de um conjunto finito onde exista algum
sentido de percurso, dominância, favoritismo ou qualquer um outro que
manifeste a idéia de direcionamento entre os elementos. Por exemplo,
um tal conjunto pode ser os times de um campeonato de futebol e a
relação entre eles os resultados vencedor-perdedor dos jogos onde não é
previsto empate. Outros exemplos podem ser a relação predador-presa
entre as espécies de animais que compõem a cadeia alimentar, o plano de
trânsito de veı́culos na malha urbana formada pelas ruas de uma cidade
ou, ainda, a relação de influência entre os membros de uma famı́lia ou
de alguma organizacão empresarial ou polı́tica.

Uma maneira simples de definir um digrafo G é através do seu con-


junto de vértices V (G) = {v1 , v2 , · · · vn } onde as arestas dirigidas são
pares ordenados distintos (vi , vj ), com vi 6= vj , indicando que o vértice
vi está ligado ao vértice vj , neste sentido. Emprega-se a notação vi → vj
para indicar a existência da aresta dirigida (vi , vj ). A figura seguinte
ilustra um digrafo tı́pico.

26
Digrafos 27

Figura 7.1: Um grafo dirigido.

Ressaltamos que em um digrafo: (i) pode ocorrer mais de uma com-


ponente conexa; (ii) não existem laços nem arestas em paralelo; (iii)
são permitidas arestas bidirecionadas. O exemplo seguinte de digrafo
representa uma relação de dominância ou influência entre as pessoas,
digamos, de uma famı́lia ou organização.

Figura 7.2: Um digrafo de influência entre pessoas.

A pessoa A influencia diretamente as pessoas B e D e influencia


indiretamente as pessoas C e E. Já a pessoa B influencia diretamente
apenas a pessoa E, mas influencia indiretamente A. Por sua vez, a
pessoa C influencia diretamente as pessoas B e E e indiretamente a
pessoa A. A pessoa D influencia diretamente apenas a pessoa C, mas
indiretamente B e E. Finalmente, a pessoa E exerce influencia direta
sobre A e indireta sobre B. Portanto, a pessoa A é a mais influente do
grupo.

7.2 Matriz de adjacência de um digrafo

Se G é um digrafo com conjunto de vértices V (G), então definimos a


sua matriz de adjacência como
A = (aij )n×n
onde aij = 1 se vi → vj e aij = 0 caso contrário. Como um digrafo não
admite laços, temos que aii = 0 para i = 1, 2, · · · , n. Para o digrafo da
Digrafos 28

figura (7.2), fazendo a correspondência A = 1, B = 2, C = 3, D = 4 e


E = 5, temos a seguinte matriz de adjacência:
 
0 1 0 1 0
 0 0 0 0 1 
 
A=   0 1 0 0 1 

 0 0 1 0 0 
1 0 0 0 0 5×5

Note que, em geral, a matriz de adjacência não é simétrica.

7.3 Caminhos dirigidos de comprimento r

As entradas da matriz de adjacência A de um grafo G indicam se existe


(entrada 1) ou não (entrada 0) uma aresta dirigida ligando o vértice vi ao
vértice vj . Isso equivale a dizer que as entradas representam a existência
de caminhos dirigidos de comprimento r = 1 entre os vértices do grafo.
Por exemplo, se os vértices representam um conjunto de cidades que
integram as rotas de uma companhia aérea, então a entrada aij = 1
em sua matriz de adjacência significa que existe um vôo direto entre as
cidades vi e vj e aij = 0 significa que não existe.

O resultado apresentado a seguir estabelece uma maneira de gene-


ralizar a situação acima e determinar quantos caminhos dirigidos de
comprimento r existem entre os vértices. Por exemplo, pode ocorrer
que entre duas cidades A e B não exista vôo direto, mas exista um vôo
com, digamos, uma escala intermediária o que faz com que o percurso
total entre elas (caminho dirigido) seja realizado em duas etapas.

Teorema 7.3.1 Seja G um digrafo e A sua matriz de adjacência cor-


(r)
respondente. Então a entrada aij da matriz Ar indica a quantidade de
caminhos dirigidos de comprimento r entre os vértices vi e vj . 

7.4 Torneios

Um torneio é um digrafo completo sem arestas bidirecionadas. Isto sig-


nifica que dados quaisquer dois vértices distintos vi e vj , então uma das
duas situações mutuamente excludentes ocorre: ou vi → vj ou vj →
vi . Por essa razão tal grafo recebe o nome de torneio, pois representa
com exatidão um campeonato onde todos jogam com todos e não há
possibilidade de empate. O digrafo a seguir representa um torneio.
Digrafos 29

Figura 7.3: Um torneio.

O resultado seguinte estabelece que em qualquer digrafo do tipo


torneio pelo menos um dos seus vértices domina direta ou indiretamente
todos os demais. Na linguagem dos campeonatos isso significa que em
qualquer torneio onde todos já jogaram com todos e não ocorreram em-
pates, sempre existe um time que ou ganhou de todos os demais ou
ganhou indiretamente. Entende-se pelo time A ganhar indiretamente
do time C a situação na qual A ganha de B e B ganha de C. Ou seja, A
ganha indiretamente de C quando ganha de um time que ganha de C.

Teorema 7.4.1 Seja G um digrafo do tipo torneio. Então, existe pelo


menos um vértice v ∈ V (G) que possui caminhos dirigidos de compri-
mento r = 1 ou r = 2 para todos os demais vértices do digrafo. 

Definimos o conceito de dominância D(vi ) de um vértice vi de um


digrafo G com n vértices do tipo torneio como sendo a soma de todos
os caminhos dirigidos de comprimento r = 1 ou r = 2 que partem de vi .
Note que se A é a matriz de adjacência de G, então podemos definir a
matriz M = A + A2 . Neste caso, se M = (cij )n×n , então a dominância
D(vi ) pode ser definida como
n
X
D(vi ) = cik .
k=1

Ou seja, a dominância de um vértice vi é igual à soma das entradas


da i−ésima linha da matriz A+A2 . Aqui, observe que a soma dos termos
da i−ésima linha da matriz A representa o total dos caminhos dirigidos
de comprimento r = 1 que emanam do vértice vi e a soma da mesma
linha da matriz A2 , o total dos caminhos dirigidos de comprimento r = 2
que partem do mesmo vértice.

A demonstração do teorema acima assegura que em qualquer torneio


existe pelo menos um vértice de máxima dominância que, neste caso, é
aquele do qual emanam caminhos dirigidos de comprimento r = 1 ou
r = 2 para todos os demais.
Capı́tulo 8

Fluxo em Redes

......................................................................

8.1 Graus de entrada e saı́da

Seja G um digrafo com conjunto de vértices V (G) e conjunto de arestas


dirigidas E(G) sem laços nem arestas bidirecionadas, onde são permiti-
das arestas em paralelo desde que possuam orientações opostas. Num tal
grafo dirigido, dado um vértice qualquer v ∈ V (G) sempre existem dois
subconjuntos de vértices associados a v, denotados por Γ− (v) e Γ+ (v),
definidos assim:

Γ− (v) = {w ∈ V (G); (w, v) ∈ E(G)}

ou seja, Γ− (v) é o conjunto dos vértices w que iniciam arestas do tipo


w → v que terminam em v;

Γ+ (v) = {w ∈ V (G); (v, w) ∈ E(G)}

isto é, Γ+ (v) é o conjunto dos vértices w que terminam arestas do tipo
v → w que iniciam em v. Note que a possibilidade de existirem arestas
em paralelo com orientações opostas faz com que Γ− (v) e Γ+ (v) não
necessariamente sejam disjuntos. Com isso, definimos o grau de entrada
do vértice v como sendo

d− (v) = |Γ− (v)|

ou seja, o número de arestas que entram em v. Similarmente o grau de


saı́da de v é o número
d+ (v) = |Γ+ (v)|
que representa a quantidade de arestas que saem de v.

30
Fluxo em Redes 31

Figura 8.1: Os conjuntos Γ− (v) e Γ+ (v) associados ao vértice v.

8.2 Capacidade e fluxo

Considere um digrafo G como descrito no item acima onde existem dois


vértices diferenciados f e s que chamamos de, respectivamente, fonte e
sumidouro e que ficam caracterizados pelos seguintes fatos:

i) d− (f ) = 0;

ii) d+ (s) = 0;

iii) Não existe aresta ligando os vértices f e s.

As condições (i) e (ii) acima equivalem a dizer que Γ− (f ) = Γ+ (s) =


∅, ou seja, do vértice fonte f apenas saem arestas dirigidas e no vértice
sumidouro s apenas entram arestas dirigidas. De modo geral, este não
é sempre o caso. Entretanto, nestas notas introdutórias, para efeito de
simplificação do modelo assumiremos essas condições.

Agora, definimos uma função c : E(G) → R+ nas arestas de G,


dita função capacidade, que a cada aresta e ∈ E(G) associa um número
real positivo c(e) denominado capacidade da aresta e. Um digrafo com
essas carcterı́sticas é chamado de rede. Se as arestas representam, por
exemplo, as tubulações de um sistema de distribuição de água, então
a capacidade de uma aresta é a vazão máxima que o cano é capaz de
suportar. Ou ainda, se as arestas representam as estradas de uma malha
rodoviária ou ruas de uma cidade, então a capacidade das arestas repre-
senta a quantidade máxima de veı́culos capaz de trafegar na via, diga-
mos, por minuto. A figura seguinte ilustra um exemplo de rede com
fonte f e sumidouro s, onde os números nas arestas representam a sua
capacidade.
Fluxo em Redes 32

Figura 8.2: Um exemplo de rede com capacidades nas arestas.

Em uma rede, podemos intoduzir um fluxo em suas arestas que parte


do vértice fonte f e termina no vértice sumidouro s. Para isso, seja
e = (u, v) a aresta u → v que inicia em u e termina em v. Formalmente,
definimos o fluxo como uma função ϕ : E(G) → R+ nas arestas dirigidas
de G que a cada aresta e ∈ E(G) associa o fluxo

ϕ(e) = ϕ(u, v)

satisfazendo as seguintes condições:

i) ϕ(e) ≤ c(e), para toda aresta e ∈ E(G). Ou seja, o fluxo em uma


aresta é sempre menor ou igual que a sua capacidade.

ii) O fluxo que entra em um vértice v ∈ V (G) \ {f, s} é sempre igual


ao fluxo que sai. Isto é,
X X
ϕ(w, v) = ϕ(v, w).
w∈Γ− (v) w∈Γ+ (v)

8.3 Valor do fluxo e cortes

Valor do fluxo que circula em uma rede é denotado por v(ϕ). Além disso,
o fluxo que sai da fonte f deve ser igual ao que entra no sumidouro s.
Ou seja, X X
v(ϕ) = ϕ(f, v) = ϕ(v, s).
v∈Γ+ (f ) v∈Γ− (s)

Evidentemente, o fluxo v(ϕ) deve possuir um valor máximo de al-


guma forma relacionado com as capacidades das arestas. Para chegar-
mos a um resultado neste sentido, apresentamos a seguir o conceito de
Fluxo em Redes 33

corte. Considerando ainda um digrafo G do tipo rede com fonte f e


sumidouro s, definimos um corte de G como uma partição (A, B) de
V (G) tal que:

i) f ∈ A e s ∈ B

ii) A ∪ B = V (G)

iii) A ∩ B = ∅.

A linha tracejada na figura abaixo ilustra um corte na rede apresen-


tada acima. Note que a fonte f e o sumidouro s ficam em lados opostos
do corte.

Figura 8.3: Um corte em rede.

Dado um corte (A, B), denotamos por E(A, B) o conjunto das arestas
orientadas de A para B, ou seja:

E(A, B) = {(u, v) ∈ E(G); u ∈ A e v ∈ B}.

Similarmente, denotamos por E(B, A) o conjunto das arestas dirigi-


das de B para A. Isto é:

E(B, A) = {(u, v) ∈ E(G); u ∈ B e v ∈ A}.

Definimos a capacidade de um corte c(A, B) como


X
c(A, B) = c(e).
e∈E(A,B)

Isso significa que a capacidade c(A, B) de um corte é a soma das capaci-


dades das arestas do corte no sentido de A para B.
Fluxo em Redes 34

Como um corte (A, B) particiona o conjunto dos vértices tendo a


fonte f de um lado e o sumidouro s do outro, então o valor do fluxo na
rede também pode ser escrito como:
X X
v(ϕ) = ϕ(e) − ϕ(e)
e∈E(A,B) e∈E(B,A)

Ou seja, o valor do fluxo v(ϕ) é a diferença entre os fluxos que passam


por um corte qualquer (A, B) em sentidos contrários.

8.4 Teorema de Ford-Fulkerson (Fluxo máximo)

Como ϕ(e) ≤ c(e) em qualquer aresta e, então vale a desigualdade:


X X
ϕ(e) ≤ c(e).
e∈E(A,B) e∈E(A,B)

Portanto, concluı́mos que

v(ϕ) ≤ c(A, B)

para todo corte (A, B). Ou seja, qualquer fluxo é sempre menor ou igual
que a capacidade de qualquer corte. Então, em particular

max v(ϕ) ≤ min c(A, B).


ϕ (A,B)

Isto é, o fluxo máximo em uma rede será sempre limitado pela capacidade
do menor corte. Na verdade, vale a igualdade e este fato é o que afirma
o seguinte e último resultado que apresentamos nestas notas:

Teorema 8.4.1 (Ford-Fulkerson) O fluxo máximo é igual à capaci-


dade do menor corte:

max v(ϕ) = min c(A, B).


ϕ (A,B)

A demonstração deste teorema é construtiva e, portanto, fornece um


algoritmo para se encontrar o fluxo máximo. Contudo, sua prova neces-
sita de outros conceitos, como o de caminho admissı́vel, que excedem os
propósitos destas notas.
Bibliografia

[1] BONDY, J.A. Graph Theory with Applications. Elsevier Science,


1976.

[2] DIESTEL, R. Graph Theory. New York: Springer-Verlag, 1997.

[3] GIBBONS, A. Algorithmic Graph Theory. Cambridge-USA, 1985.

[4] JURKIEWICZ, S. Grafos - Uma Introdução. Apostila 7 do estágio


de treinamento dos alunos premiados da OBMEP, 2006.

[5] MINOUX, M., GONDRAN,M.Graphs and Algorithms. John Wiley


Professio, 1984.

35
Índice

Árvore, 19 Fonte, 31
Árvore binária, 20 Função capacidade, 31
Árvore geradora, 20 Função peso, 24

Algoritmo ambicioso, 25 Gafo hamiltoniano, 12


Aresta incidente, 7 Grafo, 7
Arestas adjacentes, 7 Grafo bipartido, 18
Arestas bidirecionadas, 27 Grafo bipartido completo, 18
Arestas dirigidas, 26 Grafo complementar, 8
Arestas em paralelo, 6 Grafo completo, 8
Arestas múltiplas, 6 Grafo conexo, 15
Grafo de influência, 27
Busca em largura, 23 Grafo de Peterson, 15
Grafo dirigido, 26
Caminho, 11
Grafo regular, 9
Caminho Euleriano, 12
Grafo simples, 6
Caminho simples, 11
Grafo k-conexo, 17
Caminhos dirigidos, 28
Grafos isomorfos, 10
Campeonato, 28
Grau de entrada, 30
Capacidade, 31
Grau de saı́da, 30
Ciclo, 12
Grau de um vértice, 9
Ciclo euleriano, 12
Circuito, 12 Hamiltoniano, 12
Circuito Hamiltoniano, 12
Componentes conexas, 16 Isomorfismo, 10
Comprimento de caminho, 11
Conjunto de arestas, 7 Laço, 6, 9
Conjunto de vértices, 7
Máxima dominância, 29
Corte, 33
Matriz de adjacência, 22
Corte mı́nimo, 34
Matriz de adjacência de digrafo, 28
Digrafo, 26 Matriz de incidência, 21
Distância entre dois vértices, 13 Matriz simétrica, 23
Dominância, 29 Minimalmente conexo, 19
Multigrafo, 6
Fluxo, 32
Fluxo máximo, 34 Peso máximo, 25

36
Fluxo em Redes 37

Peso mı́nimo, 25
Ponte, 16

Rede, 31
Relação de incidência, 7

Subgrafo, 8
Sumidouro, 31

Torneio, 28

Vértice isolado, 6, 9
Vértices adjacentes, 7
Vértices terminais, 20

Você também pode gostar