Anda di halaman 1dari 37

Teoria dos Grafos

Renato Melo

14 de setembro de 2016

1 e-mail:

prof.renatomelo@gmail.com

Sum
ario
1 Introduc
ao a Teoria dos Grafos
1.1 Breve Historico . . . . . . . .
1.2 Para que serve? . . . . . . . .
1.3 Exemplos . . . . . . . . . . .
1.4 O Caixeiro Viajante . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

2 T
ecnicas de Demonstrac
ao
2.1 O Que Provar: Teoremas . . . . . . . . . . . .
2.2 Tipos de Demonstracao . . . . . . . . . . . . .
2.2.1 Exemplo e Contra-exemplo . . . . . . .
2.2.2 Demonstracao Exaustiva (Forca Bruta)
2.2.3 Demonstracao Direta . . . . . . . . . .
2.2.4 Contraposicao . . . . . . . . . . . . . .
2.2.5 Por Absurdo . . . . . . . . . . . . . . .
2.3 Acidentes Felizes . . . . . . . . . . . . . . . .
2.4 Exerccios . . . . . . . . . . . . . . . . . . . .
3 Noc
oes B
asicas
3.1 Definicoes . . . . . . . .
3.1.1 Grau de Vertices
3.2 Isomorfismo . . . . . . .
3.3 Mais Definicoes . . . . .
3.4 Famlias de Grafos . . .
3.5 Vizinhanca Direcionada
3.6 Exerccios . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

4 Representac
ao e Implementac
ao
4.1 Matriz de Adjacencia . . . . . .
4.2 Matriz de Incidencia . . . . . .
4.3 Lista de Adjacencia . . . . . . .
4.3.1 Lista x Matriz . . . . . .
1

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

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

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

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

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

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

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

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

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

.
.
.
.

3
4
5
5
6

.
.
.
.
.
.
.
.
.

8
8
9
9
10
10
11
11
12
12

.
.
.
.
.
.
.

14
15
15
17
19
21
23
24

.
.
.
.

26
26
27
28
29

4.4 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5 Busca em Grafos
31
5.1 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6 Trabalho
34
6.1 Organizacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.1.1 Entrega . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2 Parte I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

Captulo 1
Introduc
ao a Teoria dos Grafos
Problema 1. Tente desenhar a figura abaixo sem tirar o lapis do papel de
ponto a ponto sem passar pela mesma linha duas vezes.

Esse problema e importante? Suponha que numa pequena cidade o


servico de recolhimento de lixo e feito por um caminhao. Para evitar o
desperdcio, uma boa ideia seria fazer o caminhao passar uma u
nica vez por
cada rua e retornar ao ponto de partida.

Problema 2. Tente ligar Luz, Gas e Telefone a tres casas sem que as linhas
se cruzem.
Considere uma fabrica de placas de circuito integrado. Encontrar esquemas de ligacao que evitem cruzamento e crucial para baratear os custos
de manufatura; quanto menos camadas, mais rapido e rentavel se torna o
servico.
Nos dois casos so nos interessou considerar um conjunto de pontos e um
a essa estrutura que chamamos grafo.
conjunto de ligacoes entre eles. E
Definic
ao 1. Grafo e um conjunto de pontos, chamados vertices, conectados
por linhas, chamadas de arestas.

1.1

Breve Hist
orico

Os primeiros trabalhos em teoria dos grafos surgiram no seculo XVIII. Com


destaque para o problema descrito por Euler, conhecido como As Pontes
de K
onigsberg.

Sete pontes estabelecem ligacoes entre as margens do Rio Pregel e duas


de suas ilhas.
Discutia-se nas ruas da cidade a possibilidade de atravessar todas as
pontes sem repetir nenhuma.
Havia-se tornado uma lenda popular a possibilidade da facanha quando
Euler, em 1736, provou que nao existia caminho que possibilitasse tais
restricoes.

So e possvel atravessar o caminho inteiro passando uma u


nica vez em
cada ponte se houver exatamente zero ou dois pontos de onde sasse
um n
umero mpar de caminhos.
Euler transformou os caminhos em linhas e suas interseccoes em pontos,
criando possivelmente o primeiro grafo da historia.
Esse problema ficou conhecido como Problema do Caminho Euleriano
e sera estudado mais adiante.

1.2

Para que serve?

Grafos sao ferramenta de abstracao que servem para resolver problemas


do cotidiano.
Como?: Estudamos os problemas existentes, abstramos o problema
real e solucionamos no domnio de grafos.
A abstracao permite codificar relacionamentos entre pares de objetos

Objetos sao vertices: pessoas, cidades, pases, paginas web, etc.


Relacionamentos sao arestas: amizade, conectividade, idioma, etc.
Problema Modelo (Grafo) Algoritmo Solucao.
Isso e vantagem por que muitos problemas podem resolvidos com o
mesmo algoritmo em cima do modelo elaborado.

1.3

Exemplos

Transporte a
ereo: os vertices sao as cidades e os relacionamentos
(arestas) podem ser um voo entre duas cidades.
Atores e filmes: os vertices sao os atores e os relacionamentos (arestas) podem ser um filme em que dois atores trabalharam juntos.
WWW: os vertices sao paginas e as arestas um link de uma pagina
para outra.

1.4

O Caixeiro Viajante

Suponha que um caixeiro viajante tenha de visitar n cidades, iniciando e


encerrando sua viagem na mesma cidade. Nao importa a ordem com que as
cidades sao visitadas e de cada uma delas pode-se ir diretamente a qualquer
outra.
Problema 3. Descobrir a rota que torna mnima a viagem total.
Uma solucao possvel: achamos todas as rotas possveis, calculamos o
comprimento de cada uma delas e escolhemos a menor.
Exemplo 1. Se tivermos quatro cidades A, B, C e D, quais sao as possibilidades de rotas que o caixeiro pode considerar?

ABCDA
ABDCA
ACBDA
ACDBA
ADBCA
ADCBA
Raciocnio combinatorio, para n = 4:
a primeira e u
ltima posicao sao fixas;
na segunda podemos colocar qualquer uma das 3 cidades (B, C ou D),
uma vez escolhida uma delas, podemos colocar qualquer uma das 2
restantes na terceira;
na quarta, nao teramos nenhuma escolha, pois sobrou apenas uma
cidade;
consequentemente, o n
umero de rotas e 3 x 2 x 1 = 6.

Para n cidades, como a primeira e fixa, o n


umero total de escolhas que
podemos fazer e (n 1) (n 2) ... 2 1. Entao, basta calcular o
comprimento total das viagens de cada rota e escolher a menor. Facil para
o computador? Acho que nao!
6

Suponhamos temos um computador capaz de fazer 1 bilhao de adicoes


por segundo. Para n = 20, o n
umero de rotas e 19!. Dado que o valor de 19!
e 121.645.100.408.832.000 = 1, 2 1017 . Consequentemente, ele precisara de
1.2 x 1017 / ( 53 milhoes ) = 2,3 109 segundos = 73 anos.
O problema e que a quantidade (n 1)! cresce com uma velocidade alarmante, sendo que muito rapidamente o computador torna-se incapaz de executar o que lhe pedimos.

A existencia ou nao de um metodo eficiente para resolver o problema


do caixeiro viajante e um dos grandes problemas em aberto da Matematica,
faz parte dos Problemas do Milenio do Instituto Clay de Matematica, esses
problemas, de acordo com o site oficial, agora sao sete no total1 .

http://www.claymath.org/millennium-problems

Captulo 2
T
ecnicas de Demonstrac
ao
Suponha que em uma pesquisa observamos que diversos casos nos quais
sempre que uma proposic
ao P e verdade, Q tambem e. Baseado nessas
evidencias, formulamos uma conjectura que e: P implica em Q.
Exemplo 2. Para um inteiro positivo n. Prove ou encontre um contra exemplo para a conjectura Para todo inteiro positivo n, n! n2 .
Demonstracao. Vamos comecar testando alguns casos: Ate agora essa conn

n!

n2

n! n2

1
2
3

1
2
6

1
4
9

sim
sim
sim

jectura parece boa. Mas, para o proximo caso,


n2

n!

24 16

n! n2
nao

encontramos um contra exemplo, o caso n = 4 e suficiente pra provar a


falsidade da conjectura.
A seguir vamos examinar alguns metodos para fazer uma demonstracao.

2.1

O Que Provar: Teoremas

O primeiro passo para a resolucao de um problema e defini-lo correta e precisamente. A definicao do problema envolve as seguintes questoes:
8

Definir claramente qual o objeto sobre o qual se deseja provar algo


Caractersticas desse objeto
O que se deseja provar

Um teorema nada mais e do que uma afirmacao que apresenta essas tres
caractersticas.
Tradicionalmente, um teorema e dividido em duas partes: a hipotese
apresenta as informacoes conhecidas sobre o problema; a tese representa o
que de fato se deseja provar.
Teorema: Se hipotese, entao tese.
Em algumas situacoes, teoremas recebem denominacoes especiais:
Axioma: Afirmacoes que sao aceitas como verdadeiras.
Lema: Afirmacao que deve ser provada e que normalmente e usada na
prova de um teorema.
Corol
ario: Um teorema que pode ser derivado de forma natural, imediata ou obvia de um outro teorema. Considere o seguinte exemplo:

Teorema A soma dos angulos internos de um triangulo e 180


graus.
Corol
ario Cada angulo de um triangulo equilatero tem 60 graus.
Conjectura: termo usado para descrever teoremas em potencial cuja
veracidade ou nao ainda esta indeterminada.

Como a prova de um corolario ?e por definicao muito simples, ela e frequentemente omitida.

2.2

Tipos de Demonstrac
ao

Conforme veremos, ha diversos tipos de provas, todos igualmente validos.

2.2.1

Exemplo e Contra-exemplo

Alguns tipos especiais de teoremas prestam-se a provas relativamente simples:


a mera apresentacao de um exemplo ou contra-exemplo.
Exemplo 3 (Terema). Existem tres inteiros positivos x, y e z tais que x2 +
y2 = z2.
9

Demonstracao. Os n
umeros x = 3, y = 4 e z = 5 sao inteiros que satisfazem
a` restricao (32 + 42 = 52 ).
Contra-exemplos sao usados de forma semelhante aos exemplos, mas para
provar que uma determinada conjectura esta errada.
Exemplo 4 (Conjectura). Nenhum n
umero primo e par.
Demonstracao. A conjectura esta incorreta, pois o n
umero 2 e primo e e
par.
Problema 4. De contra exemplos para as seguintes conjecturas:
1. Todos os animais vivendo no oceano sao peixes.
2. Todo inteiro menor que 10 e maior que 5.
Observacao: Nem sempre uma prova por contra-exemplo e tao simples.
Como e o caso do n
umero de Fermat, cuja conjectura e: todos os n
umeros da
n
forma 22 + 1 sao primos. Onde apenas 70 anos depois da morte de Fermat,
o matematico Leonard Euler encontrou um contra-exemplo.

2.2.2

Demonstrac
ao Exaustiva (For
ca Bruta)

Uma demonstracao exaustiva significa que foram exauridos todos os casos


possveis.
Exemplo 5. Prove que se um inteiro e divisvel por 6, entao tambem e
divisvel por 3.
Demonstracao. Como existe um n
umero finito de casos, a conjectura pode
ser provada mostrando-se todos os casos possveis.(desenhar uma tabela)
Problema 5. Prove que para todo inteiro positivo x, tal que x 5, x2
10 + 5x.
Problema 6. De um contra exemplo: para qualquer inteiro positivo x, x2
10 + 5x.

2.2.3

Demonstrac
ao Direta

uma prova um
Suponha uma hipotese P e deduza uma conclusao Q. (E
pouco mais informal)
Exemplo 6. Para todo x e para todo y, tal que x e y sao inteiros pares. O
produto xy e um inteiro par.
10

Demonstracao. Sejam x = 2m e y = 2n, onde m e n sao inteiros. Entao


xy = 2m 2n = 2(2mn), onde 2mn e um inteiro. Logo, xy tem a forma 2k,
onde k e um inteiro, portanto, e par.
Problema 7. De uma demonstracao direta do teorema. Se um inteiro e
divisvel por 6, entao duas vezes esse inteiro e divisvel por 4.

2.2.4

Contraposi
c
ao

Como P Q e a contrapositiva de P Q, chamamos de demonstrac


ao
por contraposic
ao a tecnica de provar P Q atraves de uma demonstracao direta de P Q .
Exemplo 7. Prove que se o quadrado de um inteiro e mpar, o inteiro tem
que ser mpar.
Demonstracao. A conjectura e n2 implica em n mpar. Vamos fazer uma
demonstracao por contraposicao e provar que n par implica em n2 par.
Seja n par. Entao n2 = n n e par, pela definicao de n
umero par.
Problema 8. Prove que o produto xy e impar se, e somente se, ambos x e
y sao inteiros mpares.
Demonstracao. Pag. 72 do livro da Judith.

2.2.5

Por Absurdo

Em uma demonstracao por absurdo supomos que a hipotese e a negacao da


conclusao sao ambas verdadeiras e tentamos deduzir uma contradicao dessas
proposicoes.
Exemplo 8. Demonstrar por absurdo que se um n
umero somado a ele mesmo
e igual a ele mesmo, entao esse n
umero e 0.
Demonstracao. A hipotese e que x + x = x e a conclusao e que x = 0.
Suponha que x + x = x e x 6= 0. Pag. 73 livro da Judith.
Problema 9. Demonstre por absurdo que o produto de inteiros mpares nao
e par. (Fizemos uma demonstracao parecida nos exemplos anteriores)
Demonstracao. Pag. 72 do livro da Judith.

11

2.3

Acidentes Felizes

Algumas demonstracoes muito interessantes sao obtidas por observacoes engenhosas. Podemos considerar um exemplo dessas demonstracoes.
Exemplo 9. Um torneio de tenis com 342 jogadores. A cada dois jogadores
apenas o que vence a partida progride para as proximas rodadas. Prove que
ao todo serao jogadas 341 partidas.
Demonstracao. Jeito trabalhoso: Para obter o n
umero de partidas na primeira rodada: 342/2 = 171. Para obter o n
umero de partidas na segunda
rodada: 171/2 = 85 mais 1 que sobra. Para obter o n
umero de partidas na
terceira rodada: 86/2 = 43. E assim por diante.
Observa
c
ao engenhosa: cada partida resulta em exatamente 1 perdedor, entao o n
umero de partida e igual ao n
umero de perdedores no torneio.
Como existe apenas 1 ganhador, sao 341 perdedores e, portanto, 341 partidas
sao jogadas.

Tabela 2.1: metodos de demonstracao em resumo.


Para provar P Q
Observacoes
Demonstre P Q Apenas para provar um n
umero
para todos os casos finito de casos
possveis
Direta
Suponha P, deduza Q Abordagem padrao - o que se deve
tentar em geral
Contrapositiva Suponha Q, deduza P Use essa se Q parece dar mais
municao do que P
Absurdo
Suponha P e Q, de- Use quando Q disser que alguma
duza uma contradicao coisa nao e verdade

Tecnica
Exaustiva

2.4

Exerccios

Definicoes u
teis na resolucao exerccios: Um quadrado perfeito e um inteiro
n tal que n = k 2 para algum inteiro k; Um n
umero primo e um inteiro
n > 1 tal que n nao e divisvel por nenhum inteiro alem de 1 e n; Para dois
n
umeros x e y, x < y significa y x > 0.
1. Encontre contra-exemplos para cada uma das seguintes afirmacoes:
a) Toda figura geometrica com quatro angulos retos e um quadrado.
12

b) Se um n
umero real nao e positivo, entao ele deve ser negativo.
2. Prove que se n e um inteiro par, tal que 4 n 12, entao n e a soma
de dois n
umeros primos.
3. Prove que a soma de dois inteiros mpares e par.
4. Prove que o quadrado de um n
umero par e divisvel por 4.
5. Prove por contradicao que se qualquer n
umero x e positivo, entao x + 1
tambem e positivo.
6. Prove que o produto de quaisquer dois inteiros consecutivos e par. Dica:
Dividir em dois casos.
7. Prove que o quadrado de um inteiro mpar pode ser escrito como 8k + 1
para algum inteiro k.
8. Prove ou apresente um contra-exemplo: O produto de quaisquer tres
inteiros consecutivos e par.

13

Captulo 3
Noc
oes B
asicas
Suponha um torneio de volei em uma escola de ensino fundamental no qual
as turma participantes sao: 6A, 6B, 7A, 7B, 8A, 8B. Os seguintes jogos ja
forma realizados:
Tabela 3.1: Tabela de jogos
Turma Jogou com
6A
7A, 7B, 8B
6B
7A, 8A, 8B
7A
6A, 6B
7B
6A, 8A, 8B
8A
6B, 7B, 8B
8B
6A,6B, 7B, 8A
Nao e difcil notar que esta estrutura e um grafo. Podemos usar outra
representacao como a figura que segue.

14

Tanto a lista que apresenta quem joga com quem como a representacao
grafica, sao formas corretas de representar um grafo. O que interessa num
grafo e:
quem sao os vertices
quais pares de vertices estao ligados por arestas.

3.1

Definico
es

Um grafo G e definido por G = (V, E), sendo que V representa o


conjunto de vertices, e E o conjunto de arestas (v, w), onde v, w V .

Exemplo: V = {6A, 6B, 7A, 7B, 8A, 8B} e


E = {{6A, 7A}, {6A, 7B}, {6A, 8A}, {6B, 7A}, {6B, 8A},
{6B, 8B}, {7B, 8A}, {7B, 8B}, {8A, 8B}}
nao colocamos {7A, 6A} por que ja havamos colocado {6A, 7A}
e assim por diante.
os vertices 7A e 6A sao as extremidades da aresta.
Dois vertices v, w sao ditos adjacentes (ou vizinhos), se eles estao
conectados por uma aresta. (Exemplos)
Arestas associadas a um mesmo vertice sao chamadas de la
co ou loop.
O n
umero de vertices de um grafo G sera denotado como |V (G)| ou
pela letra n.
O n
umero de arestas de um grafo G sera denotado como |E(G)| ou pela
letra m.

3.1.1

Grau de V
ertices

No exemplo do torneio, cada turma tem um n


umero diferente de jogos, como
mostra a tabela 3.2. Consequentemente, esse e o mesmo n
umero de arestas
em cada vertice. Dizemos que estas arestas sao incidentes ao vertice.
O grau de um vertice v, denotado por (v), e o n
umero |E(v)| de
arestas incidentes em v. Um vertice de grau 0 e um dito isolado.

Exemplo: (8B) = 4 e (7A) = 2

15

Tabela 3.2: N
umero de jogos
Turma # de jogos
6A
3 jogos
6B
3 jogos
7A
2 jogos
7B
3 jogos
8A
3 jogos
8B
4 jogos
Grau mnimo de um grafo G e o n
umero (G) := min{(v) : v
V (G)}.

Exemplo: No grafo do torneio (G)


=2
Grau m
aximo de um grafo G e o n
umero (G) := max{(v) : v
V (G)}.

Exemplo: No grafo do torneio (G) = 4


Problema 10. Calcule os seguintes valores para cada um dos grafos da Figura 3.1.1 que seguem:
a) o grau de cada vertice
b) a soma de todos os graus
c) o n
umero de arestas
d) existe alguma relacao entre (a) e (b)?
No exerccio acima voce deve ter notado que a soma dos graus e sempre
o dobro do n
umero de arestas, isso em linguagem matematica e o Teorema
1.
Teorema 1. Em todo grafo G = (V, E), a soma dos graus dos vertices e
igual ao dobro do n
umero de arestas. Isto e,
X
(G) = 2|E(G)|.
vV (G)

Demonstracao. Quando contamos os graus dos vertices estamos contando as


extremidades das arestas uma vez. Como cada aresta tem duas extremidades,
cada aresta foi contada duas vezes.
16

Corol
ario 2. Todo grafo G possui um n
umero par de vertices de grau mpar.
Demonstracao. Se tivessemos um n
umero mpar de vertices de grau mpar a
soma dos graus seria mpar. Mas a soma dos graus e o dobro do n
umero de
arestas e, portanto e um n
umero par.
Observacao: Grafos que possuem lacos tambem respeitam o teorema.
Contamos os lacos duas vezes, uma para cada extremidade. Por exemplo a
Figura 3.1.1.
O grau m
edio de um grafo G e dado pela seguinte equacao:
X
1

(v)
(3.1)
(G)
=
|V (G)|
vV (G)

3.2

Isomorfismo

Quando dois grafos podem representar a mesma situacao dizemos que eles
sao grafos isomorfos.
17

Figura 3.1: Grafo com lacos.


Por exemplo os grafos da figura:

Claramente, as caractersticas sao as mesmas, tais como: graus, n


umero
de arestas, e outras que veremos. Mas o mais importante e saber discernir
quando dois grafos sao isomorfos ou nao.
Definic
ao 2. Dois grafos G1 e G2 sao ditos isomorfos se existe uma correspondencia um-a-um entre seus conjuntos de vertices, de modo que as adjacencias sao preservadas.
Por exemplo:
Exemplo 10. Vamos estabelecer uma correspondencia entre cada um dos

18

vertices de ambos os grafos.


f :a w
bx
cz
dy

(3.2)

Esta funcao funciona perfeitamente:


Se pegarmos qualquer aresta de G1 a funcao fara correspondencia com
uma aresta do G2 .

Exemplo: {a, d} E(G1 ) e {w, y} E(G2 )


Se pegarmos dois vertices que nao sao ligados por uma aresta em G1 , a
funcao devera corresponder com dois vertices em G2 que tambem nao
sao ligados.

Exemplo: a, c V (G1 ) e w, z V (G2 )


Problema 11. Verifique que a correspondencia a seguir nao serve para mostrar o isomorfismo dos grafos.
f :a x
by
cz
dw

3.3

(3.3)

Mais Definico
es

O conjunto de vertices adjacentes a v e chamado vizinhan


ca aberta
de v, denotado por N(v).

19

A vizinhan
ca fechada de v e denotada e definida por N[v] = N(v)
{v}, isto e, inclui a vizinhanca e o proprio vertice.
Podemos estender esta definicao para conjuntos de vertices (N(S)
N[S]).

Por exemplo, no grafo do campeonato temos:


N(7B) = {6A, 8A, 8B} e N[7B] = {6A, 7B, 8A, 8B}.
Uma sequencia d1 , d2 , ..., dn de inteiros nao negativos e chamada de
sequ
encia de graus (grafica) de um grafo G se os vertices de G podem
ser rotulados como v1 , v2 , ...vn tal que (vi ) = di . Por exemplo:

a sequencia de graus do grafo do campeonato e (4, 3, 3, 3, 3, 2)


Dado G, e facil encontrar a sequencia
Mas dada uma sequencia de inteiros nao negativos, como saber se
uma sequencia e grafica?
* (1,1,3) nao e: todo grafo tem um n
umero par de vertices de
grau mpar
* (3,3) nao e: Para todo grafo G simples, (G) n 1. Logo,
o grau maximo para n = 2 e 1.
Pn
condicoes obvias:
i=1 di deve ser par e di n 1, i = 1, ..., n.

condicoes necessarias mas nao suficientes. Exemplo: (3,3,3,1).


(Nao existe grafo de 4 vertices com esta sequencia).
O grafo G e dito um subgrafo de G se V (G ) V (G) e E(G ) E(G).
Exemplo:

O grafo H e dito um subgrafo induzido de G se ele e obtido apenas


pela remocao de vertices em G.

20

Seja X o subconjunto dos vertices removidos, o grafo resultante e


denotado por G X
Frequentemente, o conjunto Y := V (G) \ X e o foco de interesse
Denotamos por G[Y ] o subgrafo de G induzido por Y .
Assim, E(G[Y ]) e o conjunto que contem todas as arestas de G
que tem ambas as pontas em Y .
O um grafo H e subgrafo gerador de G e obtido pela remocao de
arestas de G, tal que V (G) = V (H).

Seja S o conjunto de arestas removidas. O grafo gerador de G e


denotado por G \ S.
Todo grafo simples e gerador de um grafo completo.

3.4

Famlias de Grafos

Um grafo com apenas 1 vertice e chamado de grafo trivial.


Chamamos de grafo vazio todo grafo que nao tem arestas.
Um grafo e dito direcionado, quando e necessario ser estabelecido um
sentido (orientacao) para as arestas.

a direcao da aresta e indicada com uma seta na ponta


G e um par (V (G), A(G)) onde V (G) e um conjunto finito e
A(G) V (G) V (G). Cada elemento de A(G) e chamado de
arco de G.
V (G) = {a, b, c, d} A(G) = {(a, b), (a, d), (b, b), (c, a), (c, d), (b, a)}

Figura 3.2: Grafo direcionado


Se a = (u, v) e um arco de G, dizemos que:
21

*
*
*
*
*

o
o
o
o
o

arco a esta direcionado de u para v


arco a e um arco de u para v
vertice u e a origem (tail) de a
vertice v e o destino (head) de a
arco a sai de u e chega em v

O grafo transposto de G (ou reverso) de G e o grafo direcionado GT


com o mesmo conjunto de vertices, obtido ao reverter a direcao dos
arcos de G, isto e, V (GT ) = V (G) e A(GT ) = {(v, u) : (u, v) A(G)}.
Quando nao ha direcao nas arestas, dizemos que um grafo e n
aodirecionado.

o grafo no qual todos os vertices possuem o mesmo


Grafo regular - E
grau.
Dois grafos podem estar ligados por mais de uma arestas, estes sao
chamados de multigrafos.

O grafo das pontes de Konigsberg.


Grafos sem lacos e sem arestas m
ultiplas sao chamados de grafos simples.
Dizemos que um grafo e conexo se qualquer par de vertices e ligado
por pelo menos um caminho.
Chamamos de grafo desconexo quando existem partes que nao estao
conectadas.

cada parte e chamada de componente conexo.


definido como um grafo onde todo par de
Grafos Completos: E
vertices e ligado por uma aresta. Um grafo completo com n vertices e
denotado por Kn .
Grafo Complementar: um grafo com o mesmo conjunto de vertices
mas com as arestas que faltam no grafo original. Por exemplo:
Um grafo ponderado e um par (G, w) onde G e um grafo(direcionado)
e w e uma funcao que atribui a cada aresta(arco) a de G um peso w(a).
Se X e um conjunto de arestas(arcos) de G, o peso de X e a soma dos
pesos das arestas(arcos) em X, isto e,
X
w(X) =
w(a)
aX

22

Figura 3.4: Grafo G

Figura 3.3: Grafo G

1
3

-1

b
-2

Figura 3.5: Grafo G


Um grafo orientado e um grafo direcionado obtido a partir de um
grafo n
ao direcionado, atribuindo direcao a cada uma de suas arestas.

o grafo direcionado e uma orientacao do grafo nao direcionado


Um torneio e uma orientacao de um grafo completo.

3.5

Vizinhan
ca Direcionada

Num grafo direcionado a vizinhanca de cada vertice esta particionada em dois


conjuntos, chamados de vizinhanca de sada e vizinhanca de chegada
N(v)+ = {u V (G) : (v, u) A(G)}
N(v) = {u V (G) : (u, v) A(G)}
de forma que
N(v) = N(v)+ N(v)
Distinguimos tambem o grau de sada e grau de entrada, respectivamente,
(v)+ = |N(v)+ |
(v) = |N(v) (v)|

23

de forma que
(v) = (v)+ + (v)
Uma fonte (source) num grafo direcionado G e um vertice com grau
de chegada 0.
Um sorvedouro ou sumidouro (sink) num grafo direcionado G e
um vertice com grau de sada 0.
Distinguimos tambems os graus maximo/mnimo de entrada/sada de um
grafo direcionado:
(G)+ = max{(v)+ : v V (G)}
(G) = max{(v) : v V (G)}
(G)+ = max{(v)+ : v V (G)}
(G) = max{(v) : v V (G)}
Teorema 3. Em todo grafo direcionado G = (V, A), vale
X
X
|A(G)| =
(v)+ =
(v)
vV (G)

vV (G)

Demonstracao. Exerccio.

3.6

Exerccios

1. Proponha uma expressao para o grau medio ((G)) em funcao de |V (G)|


e |E(G)|.
2. Mostre que os pares de grafos da figuras a) e b) sao isomorfos:

(a)

(b)

3. Mostre que os pares de grafos da figuras c) e d) n


ao sao isomorfos:
4. Seja G um grafo simples.  Sabendo que que E(G) V (G) V (G),
prove que |E(G)| |V (G)|
, e determine quando a igualdade e valida.
2
24

(c)

(d)

5. Existe algum grafo nao trivial em que todos os vertices tem graus distintos? Justifique.
6. Para k = 0, 1, 2 caracterize os grafos k-regulares.
7. Quantas arestas tem K7 ? e K12 ? e Kn ?
8. Quantas arestas tem um grafo k-regular de n vertices? Justifique.
9. * Uma sequencia (d1 , d2 , ..., dn ) e grafica se existe um grafo de n vertices
cujos graus sejam (v1 ), (v2 ), ..., (vn ), respectivamente.
a) A sequencia (2,3,3,4,4,5) e grafica? Justifique.
b) A sequencia (2,2,3,4,2,3,2) e grafica? Justifique.
c) A sequencia (2,3,4,4,5) e grafica? Justifique.
10. Quantas arestas tem um grafo com vertices de graus 5,2,2,2,2,1? Desenhe um possvel grafo.

25

Captulo 4
Representac
ao e
Implementac
ao
4.1

Matriz de Adjac
encia

Uma das formas mais utilizadas para representar grafos e via a matriz de
adjacencia.
Seja A uma matriz n n, onde n e o numero de vertices de um grafo
G = (V, E) qualquer.
A matriz de adjacencia A e construda como:
(
1 se (i, j) E(G)
A(i, j) =
0 caso contrario

Exemplo de matriz de adjacencia:


Quando o grafo e ponderado, a matriz de pesos e construda de maneira
semelhante `a matriz de adjacencia, troca-se os 1s pelo valor do peso.

26

A matriz de adjacencia de um grafo ponderado (G, w) e dada por



w({u, v}) , se {u, v} E(G);
MG [v, a] =
0
, caso contrario.

1
3

-1

b
-2

Figura 4.1: Grafo G


Para grafos direcionados, a matriz nao e simetrica.
Exerccio: Seja M uma matriz de incidencia e A uma matriz de adjacencia de um grafo G.

i) Mostre que toda coluna de M soma 2.


ii) O que e a soma das colunas de A?

4.2

Matriz de Incid
encia

A matriz de incidencia B de um grafo G = (V, E), com V = (v1 , v2 , ..., vn )


e E = (e1 , e2 , ..., em ), e definida da seguinte forma:
(
1 se vi ej
B(i, j) =
0 caso contrario
Exemplo de matriz de incidencia:

27

Se G e direcionado, entao bij = +1 se vi esta no incio da seta e bij = 1,


caso vi esteja na cabeca da seta.
Para grafos ponderados, vale tambem a mesma observacao no que diz
respeito `a escolha de sinais para representar os arcos e seus pesos.

4.3

Lista de Adjac
encia

Trata-se de uma representacao que favorece a recuperacao mais rapida


de informacao nos grafos
Nao possuir informacoes de nao adjacencia (os zeros na matriz de adjacencia)
A lista de adjacencia de um grafo G consiste em um arranjo L que
contem |V (G)| listas, uma para cada vertice.
Para cada u V (G) a lista L contem todos os vertices v tal que
v N(u). Isto e, L[u] consiste em todos os vertices adjacentes a u em
G.

Cada lista tem tamanho |L[v]| = (v) e o conjunto de todas as listas


ocupa:
X
X
|L[v]| =
(v) = 2|E(G)|
vV (G)

vV (G)

Ocupa uma posicao para cada vertice. Portanto, espaco total ocupado
e (|V (G)| + |E(G)|) enquanto na matriz e (|V (G)|2 )

28

Se G e direcionado: a soma dos comprimentos de todas as listas e


|E(G)|.
Se G e nao direcionado: a soma dos comprimentos de todas as listas e
2|E(G)|.
Se G e ponderado: armazenamos o peso w(u, v) da aresta u, v com o
vertice v na lista de adjacencia de u.

4.3.1

Lista x Matriz

Abaixo segue algumas diferencas no tempo de execucao de algumas operacoes:


Decidir se u e v sao vizinhos

O(|V (G)|) na lista


O(1) na matriz
Percorrer a vizinhanca do vertice de v

((v)) na lista
(|V (G)|) na matriz
Percorrer todas as arestas

(|E(G)|) na lista
(|V (G)|2 ) na matriz
Determinar o grau do vertice v

((v)) na lista
(|V (G)|) na matriz
Acrescentar aresta {u, v}

O(1) em ambos
29

Remover aresta {u, v}

(|V (G)|) na lista


O(1) na matriz

4.4

Exerccios

1. Qual o complemento do grafo desconexo formado por duas componentes


conexas tal que o primeiro componente e um K3 e o segundo e um K7 ?
2. Para um grafo simples G. Seja m = |E(G)| e n = |V (G)|. Mostre que
se G e conexo, entao m n 1.
3. Qual o menor valor de |E(G)| que garante que G e conexo?
4. Desenhe a representacao grafica dada pelo grafo da matriz de adjacencia
na Figura 4.

5. Descreva algoritmos eficientes para calcular o grafo transposto GT a


partir de G, para a sua representacao em lista de adjacencias e tambem
para matriz de adjacencia. Qual o tempo de execucao de cada algoritmo?
6. Dada uma representacao por lista de adjacencia de um grafo direcionado, qual o tempo necessario para calcular o grau de sada de todos
os vertices?
7. Seja M uma matriz de adjacencia de um grafo G. Prove que, para todo
grafo G temos M 2 [v, v] = (v), para todo v V (G).
8. Prove que, se G e um grafo direcionado, entao
X
X
|A(G)| =
(v)+ =
(v)
vV (G)

30

vV (G)

Captulo 5
Busca em Grafos
A busca visa resolver uma questao basica: como explorar um grafo? Ou seja,
deseja se obter um processo de como caminhar pelos nos e arestas de um
grafo.

5.1

Busca em Largura

Um dos algoritmos mais simples para realizar busca em grafos.

modelo de muitos algoritmos importantes em grafos.


E

Arvore
geradora mnima
Caminhos mnimos (ideias semelhantes as de busca em largura)
A ideia da busca em largura consiste em processar todos os nos em um
dado nvel antes de caminhar para um nvel mais alto.
O algoritmo descobre todos os vertices a uma distancia k do vertice de
origem antes de descobrir qualquer vertice a uma distancia k + 1.
O grafo G(V, E) pode ser direcionado ou nao direcionado.
Dado um grafo G(V, E) e um vertice fonte s V (G)

Explora as arestas de G para descobrir cada vertice que pode ser


alcancado por s.
Calcula a distancia (menor n
umero de arestas) de s ate cada
vertice que pode ser alcancado.
Para controle da busca, pinta cada vertice de branco, cinza ou preto.

31

Dizemos que um vertice e descoberto a primeira vez que ele e encontrado (cinza).
Se {u, v} E(G) e u e preto, v e cinza ou preto.

Todos os vizinhos de vertices pretos sao cobertos.


Cinzentos podem ter vizinhos brancos (cinzas sao fronteiras entre
brancos e pretos).
O procedimento descrito no algoritmo que segue assume que G e representado
por uma lista de adjacencia. Atributos de cada vertice:
u.cor
u.pai
u.d

Algoritmo 1: Busca em Largura


Entrada: Um grafo G = (V, E) e s V (G)
1 in
cio
2
s.cor cinzento
3
s.pai null
4
s.d 0
5
para u V (G) s faca
6
u.cor branco
7
u.pai null
8
u.d
9
fim
10
Q
11
Q.Enfileira(s)
12
enquanto Q 6= faca
13
u Q.Desenfileira(s) para v N(u) faca
14
se v.cor = branco ent
ao
15
v.cor cinzento
16
v.pai u
17
v.d u.d + 1
18
Q.Enfileira(v)
19
fim
20
u.cor preto
21
fim
22
fim
23 fim
32

5.2

Exerccios

1. Mostre os valores de d e pai que resultam da execucao da busca em


largura no grafo direcionado da figura abaixo, usando o vertice 3 como
fonte.

2. Mostre os valores de d e pai que resultam da execucao da busca em


largura no grafo nao direcionado da figura abaixo, usando o vertice 3
como fonte.

33

Captulo 6
Trabalho
O objetivo deste trabalho e desenvolver uma biblioteca para manipular grafos. Esta devera ser capaz de representar grafos de diferentes tipos e conter
um conjunto de algoritmos em grafos, de modo que possa ser utilizada em outros programas (possivelmente no projeto integrador). Para isso, a biblioteca
pode ser uma classe em Java (ou conjunto de funcoes em C).

6.1

Organiza
c
ao

A princpio o trabalho sera divido em tres partes. Cada parte corresponde a


uma ou mais funcionalidades que deverao ser incorporadas `a sua biblioteca. O
trabalho podera ser realizado em dupla. Neste caso, a dupla deve permanecer
junta por todas as partes do trabalho. Cada parte tera um prazo de entrega
e sera avaliada de maneira independente.
Para a representacao de grafos na sada do programa vamos utilizar a
linguagem de descricao de grafos dot que e implementada pelo pacote de
software GraphViz. Para uma amostra da linguagem dot veja esta galeria de grafos no link: http://www.graphviz.org/Gallery.php. O pacote
GraphViz e distribudo livremente para diversas plataformas. Disponvel em
http://www.graphviz.org/Download..php. Por enquanto, utilizaremos o
formato apenas para fins de visualizacao grafica dos grafos resultantes. Para
isso, a biblioteca deve ser capaz de salvar o grafo em um arquivo .dot.
Para auxiliar a execucao do trabalho, e fornecido o arquivo parte1.tar.gz
contendo os seguintes arquivos:
Grafo.java: contem a especificacao do que deve ser implementado
Vertice.java: a classe que representara cada vertice do grafo
Aresta.java: a classe que representara cada aresta do grafo

34

Teste.java: um programa para ilustrar o uso da biblioteca

6.1.1

Entrega

Deve ser entregue um arquivo compactado de nome: nome1 nome2.tar.gz,


onde nome1 e nome2 corresponde ao primeiro nome de cada aluno da dupla.
Contendo apenas os arquivos Grafo.java, Vertice.java e Aresta.java,
devidamente implementados e acompanhados de um readme.txt: arquivo
que deve ser usado para comunicar tudo que seja relevante para a correcao
do trabalho.
Data de entrega: 18/09 ate as 23:59.

6.2

Parte I

Segue abaixo as funcionalidades a ser implementadas na primeira parte do


trabalho:
Entrada: Ler um grafo simples nao direcionado de um arquivo texto
no seguinte formato.

4
0
1
1

3
1
2
3

A primeira linha informa o n


umero de vertices e o n
umero de arestas,
separados por espaco. Cada linha subsequente informa as arestas.
Representa
c
ao: Utilizar tanto matriz de adjacencia, quanto lista de
adjacencia.
Sada: Mostrar na sada padrao as seguintes informacoes sobre o grafo:
n
umero de vertices, n
umero de arestas, grau medio e distribuicao dos
graus (matriz de distancias).

N
umero de v
ertices: 4
Numero de arestas: 3
Grau m
edio: 1.5
#Distribui
ca
~o de graus
0 vertices de grau 0
35

3 vertices de grau 1
0 vertices de grau 2
1 vertices de grau 3

Por fim, gerar um arquivo texto com a extensao .dot, de acordo com o
exemplo:

graph
1
2
3
}

g {
-- 0;
-- 1;
-- 1;

36

Anda mungkin juga menyukai