Você está na página 1de 62

Anjolina Grisi de Oliveira

obs: muitos slides foram cedidos por


Adolfo Almeida Duran (UFBA)

2005

Determine se os seguintes grafos so bipartidos

Grafo bipartido?
v1
v2

v4

v3

Determine se os seguintes grafos so bipartidos

Outros tipos de grafos


Grafo cclico (ou simplesmente Ciclo)
Um grafo conectado que regular de grau 2
um grafo cclico (= ciclo)
Cn um grafo cclico com n vrtices
C6

Grafo roda
O grafo obtido a partir de Cn-1 atravs da
ligao de cada vrtice a um novo vrtice v
um grafo roda em n vrtices, Wn

C5

W6

Grafos n-cbicos
Os grafos n-cbicos, denotados por Qn, so
grafos cujos vrtices representam as 2n
cadeias de bits de tamanho n.
Dois vrtices so adjacentes se e somente se
as cadeias de bits que eles representam
diferem em exatamente uma posio de bit.

Grafos Orientados ou Dgrafos


Um dgrafo G(V,A) um conjunto finito no vazio V de
vrtices, e um conjunto A de pares ordenados de
elementos de V. Chamamos o conjunto A de arcos
(tambm podemos chamar de arestas).

Multigrafo Orientado G(V,A)


Consiste de um conjunto V no vazio de vrtices, um
conj. A de arestas e uma funo f de A em {(u,v) | u,vV}.
As arestas e1 e e2 so mltiplas se f(e1) = f(e2).

Revisando
Tipo Arestas Mltiplas?
Laos?
------------------------------------------------------------------Simples
no dir. No No
Multigrafo no dir. Sim No
Pseudografo
no dir, Sim Sim
Direcionado dir. No Sim
Multigrafo dir.
dir. Sim Sim

Os vrtices de um dgrafo possuem:


Grau de entrada: nmero de arcos que chegam no vrtice
(grauent(v))
Grau de sada: nmero de arcos que partem do vrtice
(grausai(v))

Proposio
grauent(vi) = grausai(vi) = | A |

Representao de grafos
Embora seja conveniente a
representao de grafos atravs de
diagramas de pontos ligados por
linhas, tal representao
inadequada se desejamos armazenar
grandes grafos em um computador

Lista de adjacncia
Uma maneira simples de armazenar grafos, listando
os vrtices adjacentes a cada vrtice do grafo
u

u: v,y
v: u,y,w
w: v,x,y
x: w,y
y: u,v,w,x

Lista de adjacncia em grafos direcionados


Tabela com vrtices iniciais e finais (terminais)
y
x
u
w

Inic.
u:
v:
w:
x:
y:

Terminais
u,v
v
y,w

Matriz de adjacncia
Se G um grafo com vrtices {1,2,3,...,n}, sua matriz de
adjacncia a matriz n X n cujo elemento ij o nmero de
arestas ligando o vrtice i ao vrtice j

Matriz de adjacncia
Se G um grafo direcionado com vrtices {1,2,3,...,n}, sua matriz de adjacncia a matriz n X n cujo
elemento ij o 1 se existe uma arestas onde vi o vrtice inicial e vj o vrtice final.
J estudamos esse tipo de matriz na representao de relaes.
Se G um multigrafo direcionado com vrtices {1,2,3,...,n}, sua matriz de adjacncia a matriz n X n
cujo elemento ij o nmero de arestas onde vi o vrtice inicial e vj o vrtice final.
A matriz de adjacncia para grafos com direo no necessariamente simtrica.

Matriz de incidncia
Se G um grafo com vrtices {1,2,3,...,n} e arestas {1,2,3,...,m}, sua matriz de
incidncia a matriz n X m cujo elemento ij igual a
1 se a aresta ej incidente ao vrtice vi, ou

0, caso contrrio

Arestas mltiplas so representadas usando colunas


com entradas idnticas.
Laos so representados usando colunas com
extamente uma entrada igual a 1.

Conectividade
Caminho em um grafo no orientado
Um caminho de tamanho n de u para v, onde n um
inteiro positivo, em um grafo no orientado uma
seqncia de arestas e1,...,en do grafo de forma que f(e1)
= {x0,x1}, f(e2) = {x1,x2}...f(en)={xn-1,xn}, onde x0=u e xn=v.

G1
Se o grafo simples,
denotamos o caminho
por sua seqncia de
vrtices: x0, x1 ,...xn

Conectividade
Caminho em um multigrafo direcionado
Um caminho de tamanho n de u para v, onde n um
inteiro positivo, em um multigrafo direcionado uma
seqncia de arestas e1,...,en do grafo de forma que
f(e1) =(x0,x1), f(e2) = (x1,x2)...f(en)=(xn-1,xn), onde x0=u e
xn=v.

Quando no existem
arestas mltiplas, o
caminho pode se
denotado por um
seqncia de vrtices:
(x2, x5, x4, x1)

Conectividade
Circuito ou ciclo
Um caminho um circuito se ele comea e
termina no mesmo vrtice.
G1
Circuito: x1,x2,x5,x4,x1

Exemplos de ciclos
1

2
3

Ciclo de tamanho 3
1241

2
3

Ciclo de tamanho 3
1231

Ciclo (ou circuito)

A seqncia de vrtices
(x1, x2, x5, x4, x1)
um exemplo de ciclo

Caminho (ou circuito) simples


Um caminho ou circuito chamado de simples se ele
no contem a mesma aresta mais de uma vez .

Conectividade
Definio para grafos no orientados
Um grafo no orientado chamado de conexo
(ou conectado) se existe um caminho entre
cada par de vrtices distintos do grafo.
G1

Em uma rede de
computadores, quaisquer
dois computadores podem
se comunicar se e
somente se o grafo da
rede conexo.

Grafo desconexo
O grafo mostrado a seguir no conexo pois, por
exemplo, no existe um caminho entre x3 e x5.

Componente conexa
Um grafo G(V,A) desconexo formado por pelo menos dois
subgrafos conexos, disjuntos em relao aos vrtices
Cada um destes subgrafos conexos dito ser uma componente
conexa de G.

Vrtice de corte (ou pontos de articulao)


Um vrtice dito ser um vrtice de corte se sua
remoo (juntamente com as arestas a ele conectadas)
produz um grafo com mais componentes conexos. (se
o grafo original conexo, ele se torna desconexo).

X2 um vrtice de corte

Ponte
Uma aresta dita ser uma ponte se sua
remoo produz um grafo com mais
componentes conexos.

(X1,X4) uma ponte

Grafo fortemente conexo


No caso de grafos orientados (digrafos), um grafo dito ser fortemente conexo
se existe um caminho de a para b e de b para a, para cada par a,b de vrtices
do grafo.
ou seja, se cada par de vrtices participa de um circuito.
Isto significa que cada vrtice pode ser alcanvel partindo-se de qualquer
outro vrtice do grafo.

Grafo fracamente conexo


Um grafo direcionado G(V,A) chamado de fracamente
conexo se existe um caminho entre cada par de
vrtices no grafo no orientado subjacente.

Cada um destes
subgrafos
fortemente conexo.
No entanto, o grafo
todo apenas
fracamente conexo.

Circuito Euleriano
Um circuito euleriano em um grafo G um
circuito simples que contem cada aresta de G.

Teorema (Euler 1736)


Um multigrafo conectado G possui um circuito euleriano
se e somente se o grau de cada vrtice de G par.

Prova:
Ida: Seja G um grafo euleriano. Por cada ocorrncia de
vrtice do circuito euleriano, existe uma aresta que chega
nesse vrtice e outra que sai desse vrtice. Como toda
aresta faz parte do circuito, isto , nenhuma aresta fica
fora do ciclo, necessariamente o nmero de arestas por
cada vrtice par.

Volta: Suponhamos que todos os vrtices possuem


grau par. Seja vi um vrtice do grafo. Tentemos, a partir
de vi, construir um caminho que no passa duas vezes
pela mesma aresta, e at que no seja possvel
continuar. Como todos os vrtices possuem um grau
par, sempre ser possvel entrar e sair de um vrtice. A
nica exceo o vrtice vi onde o caminho vai
terminar. Se esse caminho, que chamaremos C1,
contm todas as arestas de G, temos um ciclo
euleriano. Seno, retiramos de G todas as arestas que
fazem parte de C1. No grafo resultante G', todos os
vrtices tambm possuem grau par e necessariamente
um deles faz parte de C1, seno o grafo no seria

Volta (cont.): Recomeamos o mesmo processo com o


grafo G', partindo de um vrtice comum com C1,
obtendo assim um novo circuito C2. A figura abaixo
mostra que dois circuitos que tm um vrtice em
comum podem formar um circuito nico: chegando no
vrtice comum em um dos dois circuitos, continuamos
o percurso no outro circuito. Continuando esse
processo, necessariamente obteremos um circuito
nico que contm todas as arestas de G.

Algoritmo de Hierholzer
Algoritmo para a construo de um ciclo euleriano
sugerido a partir da prova do teorema de Euler
Comece em qualquer vrtice u e percorra aleatoriamente
as arestas ainda no visitadas a cada vrtice visitado at
fechar um ciclo
Se sobrarem arestas no visitadas, recomece a partir de
um vrtice do ciclo j formado
Se no existem mais arestas no visitadas, construa o
ciclo euleriano a partir dos ciclos formados, unindo-os a
partir de um vrtice comum

Algoritmo de Hierholzer
Algoritmo para a construo de um ciclo euleriano
sugerido a partir da prova do teorema de Euler

As pontes de Knigsberg

possvel sair de uma das ilhas, passar uma


nica vez por cada uma das pontes e retornar ao
ponto de origem ?

As pontes de Knigsberg

Como nem todos os vrtices tm grau par, o grafo


no euleriano. Logo, impossvel atravessar
todas as pontes uma s vez e voltar ao lugar de
partida

Algoritmo de Fleury
Algoritmo para a construo de um ciclo euleriano
em um grafo euleriano

Comece em qualquer vrtice u e percorra as


arestas de forma aleatria, seguindo sempre as
seguintes regras:
I apague as arestas depois de passar por elas
II se aparecer algum vrtice isolado, apague-o
tambm
III passe por uma ponte somente se no houver
outra alternativa

Algoritmo de Fleury
Algoritmo para a construo de um ciclo euleriano
em um grafo euleriano

Caminhos, circuitos Hamiltonianos


Um caminho (ou circuito) em um grafo G(V,E)
dito ser hamiltoniano se ele passa exatamente
uma vez em cada um dos vrtices de G

Caminho e circuito
hamiltoniano

Apenas caminho
hamiltoniano

Mais exemplos

Circuito e caminho

caminho

no
hamiltoniano

Grafo hamiltoniano
No existe uma caracterizao para identificar grafos hamiltonianos como
existe para os eulerianos
A busca de tal caracterizao um dos maiores problemas ainda no
solucionados da teoria dos grafos

Grafo hamiltoniano
Muito pouco conhecido dos grafos hamiltonianos
A maioria dos teoremas existentes so da forma: Se G possui
arestas suficientes, ento G hamiltoniano

Circuito hamiltoniano em grafos completos

Todo grafo completo, que contm mais de


2 vrtices contem um circuito hamiltoniano
Seja v1,v2,...,vn os vrtices de G. Como
existe uma aresta entre qualquer par de
vrtices, possivel, a partir de v1 percorrer
essa sequncia at vn e voltar para v1

Teorema (Dirac 1952)


Uma condio suficiente, mas no necessria,
para que um grafo conexo simples G com n (>2)
vrtices tenha um circuito hamiltoniano que o
grau de todo vrtice de g seja n/2
O grafo abaixo, possui um circuito hamiltoniano mas no
respeita a condio do teorema de Dirac

Teorema (Ore 1960)


Uma condio suficiente, mas no necessria, para
que um grafo simples G com n (>2) vrtices tenha um
circuito hamiltoniano que a soma dos graus de cada
par de vrtices no adjacentes seja no mnimo n.
Permite identificar mais grafos com circuitos hamiltonianos
que o anterior, mas demora muito para efetuar os
clculos. Uma busca por tentativa e erro pode ser mais
eficiente em alguns casos

O adjetivo "hamiltoniano" deve-se ao matemtico irlands Sir William Rowan Hamilton


(1805-1865).
Diz-se que ele inventou um jogo que envolve um dodecaedro (slido regular com 20
vrtices, 30 arestas e 12 faces).
Hamilton rotulou cada vrtice do dodecaedro com o nome de uma cidade conhecida.
O objetivo do jogo era que o jogador viajasse "ao redor do mundo" ao determinar uma
viagem circular que inclusse todas as cidades exatamente uma vez, com a restrio de
que s fosse possvel viajar de uma cidade a outra se existisse uma aresta entre os
vrtices correspondentes.

A figura abaixo mostra um grafo que


representa este problema, ou seja os vrtices
e arestas de um dodecaedro.

Alguns Problemas
Como explorar um grafo
Como obter um processo sistemtico para caminhar pelos vrtices e arestas de um grafo?
Como caminhar no grafo de modo a visitar todos os vrtices e arestas evitando repeties desnecessrias de visitas a um mesmo vrtice ou
aresta?
Que recursos adicionais so necessrios?

Como explorar um grafo


Necessidade de marcar quando um vrtice e uma
aresta j foram visitados ou no

Algoritmo Geral
Busca Geral G(V,E)
1. Escolher e marcar um vrtice inicial;
2. Enquanto existir algum vrtice v marcado e incidente a
uma aresta (v,w), no explorada, efetuar:
a) escolher o vrtice v;
b) explorar a aresta (v,w). Se w no marcado ento
marcar w.

O problema do Caminho mais curto


Um motorista deseja encontrar o caminho, mais curto possvel, entre duas cidades do Brasil
Caso ele receba um mapa das estradas de rodagem do Brasil, no qual a distncia entre cada par adjacente de cidades est exposta, como
poderamos determinar uma rota mais curta entre as cidades desejadas?
Uma maneira possvel enumerar todas as rotas possveis que levam de uma cidade outra, e ento selecionar a menor.

O problema do menor caminho consiste em determinar um menor caminho entre um


vrtice de origem s V e todos os vrtices v de V.

O problema do Caminho mais curto


Uma maneira mais eficiente:
Percorra o grafo, partindo do vrtice de origem s, associando a cada vrtice um nmero l(v) indicando
a menor distncia entre s e v.
Isso significa que quando chegamos ao vrtice v, na figura abaixo, l(v) ser min ( l(u)+6 , l(x)+4 )

3
s

1 4 2
3

2
5
x

7
y

Grafos com pesos:


- Cada aresta possui um nmero associado (peso)
- O tamanho do caminho a soma dos pesos das
arestas do caminho
u
v
6
3
9
3
s

5
5

11

Como obter um caminho mnimo partindo de s para y?

3
s

5
5

11

Outra possibilidade:
u

3
s

5
5

11

O algoritmo de Dijkstra
O algoritmo de Dijkstra aqui descrito identifica o menor caminho entre dois vrtices de um grafo no orientado.
Se desejamos calcular o menor caminho de a para z em um grafo conexo simples com pesos, primeiro encontramos um
menor caminho entre a e um primeiro vrtice, depois entre a e um segundo vrtice, esse procedimento repetido at que
seja encontrado um menor caminho entre a e z.

O algoritmo de Dijkstra
Um conjunto S de vrtices construdo inserindo-se um vrtice a cada iterao.
A cada iterao tambm adotado um procedimento para rotular vrtices: um vrtice w rotulado com o tamanho do menor caminho de a at
ele, e que contem somente vrtices do conjunto S.
O vrtice a ser inserido em S aquele com o menor rtulo.

O algoritmo de Dijkstra
O algoritmo comea rotulando a com 0 e os demais vrtices com . Usamos a notao L0(a)=0 e L0(v)= . (na iterao 0).
A notao Sk usada para denotar o conjunto S aps a iterao k. Comeamos com S 0=. O conjunto Sk formado a partir de Sk-1 adicionado-se
um vrtice u que no est em Sk-1 e possui o menor rtulo.
Aps a incluso de u em Sk, atualizamos os rtulos de todos os vrtices que no esto nesse conjunto da seguinte maneira: Lk(v) o tamanho do
menor caminho de a at v que contem apenas os vrtices de Sk.
.

O algoritmo de Dijkstra
Seja v um vrtice que no est em S k. Para atualizar o rtulo de v, observe que L k(v) o tamanho do menor caminho de a para v e que contm apenas os vrtices
que esto em Sk..
Esse caminho ou o menor caminho que contem apenas os elementos de S k-1 (sem a incluso de u) ou
o menor caminho de a at u no passo k-1 com adio da aresta (u,v).

Lk(v) = min(Lk-1(v),Lk-1(u)+ peso(u,v))

O algoritmo de Dijkstra
procedimento Dijkstra
Para i := 1 at n:
L(v)= .
L(a) = 0
S=
Enquanto z S
u := Elemento que S e L(u) mnimo
S := S {u}
Para cada vrtice v S :
Se L(u) + peso(u,v) < L(v) ento
L(v) = L(u) + peso(u,v)
(observe que L(v) = min(L(v),L(u)+ peso[u,v])
Retornar L(z)

Exemplo: Menor caminho de A at D


0: L(A)=0 e todos os outro ; S=;
1: S={A}; L(B)=4; L(F)=2;
2: S={A,F}; L(B)=3; L(C)=10; L(E)=12;
3: S={A,F,B}; L(C)=8;
4: S={A,F,B,C}; L(D)=14; L(E)=10;
5: S={A,F,B,C,E}; L(D)=13;
6: S={A,F,B,C,E,D}

6
8

D
3

10