Escolar Documentos
Profissional Documentos
Cultura Documentos
Motivao
Aplicaes
Conceitos Bsicos
0 1 4
2 vrtice
Notao: G = (V, A)
G: grafo
V: conjunto de vrtices
A: conjunto de arestas
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 4
Grafos Direcionados
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 5
Grafos No Direcionados
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 6
Grau de um Vrtice
Em grafos no direcionados:
O grau de um vrtice o nmero de
arestas que incidem nele.
Um vrice de grau zero dito isolado ou
no conectado.
Ex.: O vrtice 1 tem 0 1 4
grau 2 e o vrtice 3
isolado.
3 2 5
Em grafos direcionados
O grau de um vrtice o nmero de
arestas que saem dele (out-degree) mais
o nmero de arestas que chegam nele
(in-degree).
Ex.: O vrtice 2 tem 0 1 4
in-degree 2, out-degree
2 e grau 4.
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 7
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 8
Ciclos
Em um grafo direcionado:
Um caminho (v0 , v1 , . . . , vk ) forma um ciclo
se v0 = vk e o caminho contm pelo
menos uma aresta.
O ciclo simples se os vrtices
v1 , v2 , . . . , vk so distintos.
O self-loop um ciclo de tamanho 1.
Dois caminhos (v0 , v1 , . . . , vk ) e
(v00 , v10 , . . . , vk0 ) formam o mesmo ciclo se
existir um inteiro j tal que vi0 = v(i+j) mod k
para i = 0, 1, . . . , k 1.
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 9
Ciclos
Em um grafo no direcionado:
Um caminho (v0 , v1 , . . . , vk ) forma um ciclo
se v0 = vk e o caminho contm pelo
menos trs arestas.
O ciclo simples se os vrtices
v1 , v2 , . . . , vk so distintos.
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 10
Componentes Conectados
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 11
0 1 4
3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 12
Grafos Isomorfos
G = (V, A) e G0 = (V 0 , A0 ) so isomorfos se
existir uma bijeo f : V V 0 tal que
(u, v) A se e somente se (f (u), f (v)) A0 .
0 1
4 5
7 6
3 2
s w x t
v z y u
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 13
Subgrafos
Um grafo G0 = (V 0 , A0 ) um subgrafo de
G = (V, A) se V 0 V e A0 A.
0 1 4
3 2 5
1 4
2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 14
2 2
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 15
Em um grafo no direcionado, u e v so
vizinhos se eles so adjacentes.
0 1 4 0 1 4
3 2 5 3 2 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.1 16
Grafos Completos
rvores
(a) (b)
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.2 19
6. Imprimir um grafo.
i f ( ! grafo . listaAdjVazia ( v ) ) {
Aresta aux = grafo . primeiroListaAdj ( v ) ;
while (aux ! = null ) {
int u = aux. vertice2 ( ) ; int peso = aux.peso ( ) ;
aux = grafo . proxAdj ( v ) ;
}
}
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.2.1 23
Matriz de Adjacncia
0 1 4 0 1 4
3 2 5 3 2 5
0 1 2 3 4 5 0 1 2 3 4 5
0 1 1 0 1 1
1 1 1 1 1 1
2 1 1 2 1 1
3 1 3
4 4
5 5
(a) (b)
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.2.1 25
3 0 1 5
5
0 1 1 3 2 7
1
7 2
3 2 3
0 1 5
5
0 1 0 5 2 7
1
7 1 7
2
3 2
3
Busca em Profundidade
Busca em Profundidade
Busca em Profundidade -
Implementao
package cap7;
import cap7. listaadj . autoreferencia .Grafo;
public class BuscaEmProfundidade {
public static final byte branco = 0;
public static byte cinza = 1;
public static byte preto = 2;
private int d [ ] , t [ ] , antecessor [ ] ;
private Grafo grafo ;
Busca em Profundidade -
Implementao
public void buscaEmProfundidade ( ) {
int tempo = 0; int cor [ ] = new int [ this . grafo .numVertices ( ) ] ;
for ( int u = 0; u < grafo .numVertices ( ) ; u++) {
cor [u] = branco ; this . antecessor [u] = 1;
}
for ( int u = 0; u < grafo .numVertices ( ) ; u++)
i f ( cor [u] == branco ) tempo = this . visitaDfs ( u, tempo, cor ) ;
}
public int d ( int v ) { return this .d[ v ] ; }
public int t ( int v ) { return this . t [ v ] ; }
public int antecessor ( int v ) { return this . antecessor [ v ] ; }
}
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.3 43
b( / ) b( / )
b( / ) 2 3 b( / ) 2 3
(a) (b)
b( / ) b( / )
b( / ) 2 3 c(3/ ) 2 3
(c) (d)
c(1/ ) c(2/ )
0 1
b( / )
p(3/4) 2 3
(e)
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.3 44
0 1 0 1
b( / ) b( / )
p(3/4) 2 3 p(3/4) 2 3
(f) (g)
c(7/ ) p(7/8)
p(3/4) 2 3 p(3/4) 2 3
(h) (i)
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.3 45
Desde que
X
|adj[u]| = O(|A|),
uV
Classificao de Arestas
Existem:
Classificao de Arestas
3 cruz 4 cruz 5
4/5 7/8 11/12
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.3.2 48
Busca em Largura
Busca em Largura
3 2 5 3 2 5
b( ) b( ) b( ) c(1) b( ) b( )
F 0 F 1 3
0 1 1
(c) (d)
p(0) p(1) b( ) p(0) p(1) b( )
0 1 4 0 1 4
3 2 5 3 2 5
c(1) c(2) b( ) p(1) c(2) b( )
F 3 2 F 2
1 2 2
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.4 54
3 2 5 3 2 5
p(1) p(2) b( ) p(1) p(2) b( )
F F 4
0
(g) (h)
p(0) p(1) p(0) p(0) p(1) p(0)
0 1 4 0 1 4
3 2 5 3 2 5
p(1) p(2) c(1) p(1) p(2) p(1)
F 5 F
1
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.4 55
Ordenao Topolgica
Ordenao Topolgica
2 4 7
3/14 6/13 8/11
9 0 5 1 2 4 6 7 8 3
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.5 59
Ordenao Topolgica
Ordenao Topolgica -
Implementao
0 1 0 1 0,1,2
3 2 3 2 3
2. Obter GT .
3 2 3 2 arv
cruz
4/5 3/6 7/8 2/5
1
Modelagem:
G = (V, A): grafo conectado, no
direcionado.
V : conjunto de cidades.
A: conjunto de possveis conexes
p(u, v): peso da aresta (u, v) A, custo
total de cabo para conectar u a v.
minimizado.
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.7 70
0 0
6 5
1 1
1 2 2 3 1 2 2 3
2 2
5 6 4 4 4
4 5 4 5
3 3
(a) (b)
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.7.1 71
Um corte (V 0 , V V 0 ) de um grafo no
direcionado G = (V, A) uma partio de V .
(c) 0 (d) 0
0 0
2 2 2 2
1 3 1 3
2 2
1 1
4 5 4 4
6 4 6 4
(e) 0 (f) 0
0 0
2 2 2 2
1 3 1 3
2 2
1 1
4 5 4 5
5 4 3 4
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.7.2 76
(c) (d)
0 0
1 3 1 3
2 2
4 5 4 5
(e) (f)
0 0
1 3 1 3
2 2
4 5 4 5
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.7.3 83
Primeiro refinamento:
void Kruskal ( Grafo grafo )
ConjuntoDisjunto conj = new ConjuntoDisjunto ( ) ;
1. S = ;
2. for ( int v=0; v<grafo .numVertices ( ) ; v++) conj . criaConjunto (v ) ;
3. Ordena as arestas de A pelo peso;
4. for (cada ( u, v ) de A tomadas em ordem ascendente de peso)
5. i f ( conj . encontraConjunto (u) ! = conj . encontraConjunto ( v) )
6. S = S + {(u, v)} ;
7. conj . uniao ( u, v ) ;
Algoritmo de Dijkstra
Relaxamento
5 1 6 5 1 6
2 3 2 3
2 2 3
(c) 0
0
1 10
1 10
1 3 4
5 1 6
2 3
6 2 3
(a)
(b) {0} 0 1 3 10
(c) {0, 1} 0 1 6 3 10
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.8 96
5 1 6 5 1 6
2 3 2 3
5 2 3 5 2 3
(f) 0
0
1 10
1 6
1 3 4
5 1 6
2 3
5 2 3
(d) {0, 1, 3} 0 1 5 3 9
(e) {0, 1, 3, 2} 0 1 5 3 6
(f) {0, 1, 3, 2, 4} 0 1 5 3 6
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.8 97
Algoritmo de Dijkstra
(a) 0 (b) 0 1 2 3 4
5 arestas (1,2,0) (3,4,1) (3,5,2) (0,2,3) (2,3,4)
1
0 1 2 3 4 5
2 3
0 prim 3 0 4 9 6 7
4
2 0 1 2 3 4 5 6 7 8 9
3 prox 1 1 1 1 8 1 1 1 5 2
1 4
Projeto de Algoritmos Cap.7 Algoritmos em Grafos Seo 7.9 106