Post on 17-Apr-2015
ESCOLA DE ENGENHARIA
C++Grafos e Árvores
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 2/33
Instalação ElétricaInstalação Elétrica
5,00 m
5,00
m
L
Qu
adroTom A
Int
Tom B
Pontos, conduítes e fiação.
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 3/33
América do SulAmérica do Sul
Fronteiras entre
os países.
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 4/33
HerançaHerança
Relacionamento de
especialização.
MarinhoMarinho
AnimalAnimal
MamíferoMamífero
LeãoLeão HomemHomem
InsetoInseto
MoscaMosca BarataBarataPeixePeixe
HomoscaHomosca
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 5/33
x--;if(x>0) x+= 2;for(int k= 1; k<=x; k++){ y+= 3; w--; if(w<0) y--; else y++;}y= sqr(x);
Linguagem C++Linguagem C++
Indentação das
linhas do programa.
1
1.11.2
1.3
1.3.11.3.21.3.3
1.4
1.3.4
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 6/33
Fluxograma ISO 5807Fluxograma ISO 5807
ui+1|L(ui+1)= mín({L(v)| v D})
início
M = {u0}
L(u0) = 0
L(v) = v D
i = 0
L(v) = mín(L(v), L(ui)+W(ui , v)) v D
F
L(v) é a distânciamínima de u0 até v, v M
V
M = M {ui+1}
i = i + 1
fim
D =
1
1
Processos e
processos de
decisão.
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 7/33
ListaLista Cabeça
Remove do começo
Insere no começo
Insere no começo
Remove do meio
Insere no fim
Remove do fim
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 8/33
PilhaPilhaCabe
ça
Empilha
Empilha
Desempilha
Desempilha
Empilha
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 9/33
FilaFilaCabe
ça
Enfileira
Desenfileira
Desenfileira
Desenfileira
Enfileira
Enfileira
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 10/33
Grafos e Dígrafos (Graph, Digraph)Grafos e Dígrafos (Graph, Digraph)
• V V ØØ
• V V E = Ø E = Ø
• Ψ : E Ψ : E { { {{v, wv, w}} | v, w | v, w V} (Grafo) V} (Grafo)
• Ψ : E Ψ : E { { ((v, wv, w)) | v, w | v, w V} (Dígrafo) V} (Dígrafo)
G = (V, E, G = (V, E, Ψ)Ψ)
Vértices Arestas
ou Arcos
Função de
IncidênciaDirigido,
Orientado (Directed)
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 11/33
Exemplo de GrafoExemplo de Grafo
Lula = (Bar, Bu, Lula = (Bar, Bu, Do)Do)
Do(A) = {a, b} Do(B) = {b, c}Do(C) = {c, c} = {c}Do(D) = {c, d}
Do(E) = {b, d}Do(F) = {d, e}Do(G) = {b, e}Do(H) = {b, e}
A
B
C
D
F
G
H
E
c
b
e
d a
Do
Bar = {a, b, c, d, e}Bu = {A, B, C, D, E,
F, G, H}
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 12/33
AB
C
D
F
G
H
E
Outra Geometria do exemploOutra Geometria do exemplo
c
be
d
amude a posição dos arcos
mude a posição dos vértices
Os arcos
podem se
cruzar.
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 13/33
Exemplo de DígrafoExemplo de DígrafoPico = (Lé, DeChu, Chu)Pico = (Lé, DeChu, Chu)
Chu(A) = (a, b) Chu(B) = (b, c)Chu(C) = (c, c)
Chu(D) = (c, d)
Chu(E) = (b, d)Chu(F) = (d, e)Chu(G) = (b, e)Chu(H) = (b, e)
G
H
E
c
b
e
d a
Chu
Lé = {a, b, c, d, e}
DeChu = {A, B, C, D,
E, F, G, H}
A
B
C
D
F
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 14/33
Grafo SimplesGrafo Simples
Não possui laços (loops)Não possui laços (loops)
Não possui arestas múltiplasNão possui arestas múltiplas
X XX
X
X X
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 15/33
Vértices AdjacentesVértices Adjacentes
Grafo:Grafo: o vértice a é adjacente ao vértice b;o vértice a é adjacente ao vértice b; o vértice b é adjacente ao vértice a.o vértice b é adjacente ao vértice a.
b aA
Dígrafo:Dígrafo: o vértice a o vértice a nãonão é adjacente ao vértice b; é adjacente ao vértice b; o vértice b é adjacente ao vértice a.o vértice b é adjacente ao vértice a.
b aA
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 16/33
Grafo e Matriz de AdjacênciaGrafo e Matriz de Adjacência
aa bb cc dd ee
aa 00 11 00 00 00
bb 11 00 11 11 22
cc 00 11 11 11 00
dd 00 11 11 00 11
ee 00 22 00 11 00
c
b
e
d aA
B
C
D
F
G
H
E
simétrica
i
j
cada elemento da matriz é a quantidade de cada elemento da matriz é a quantidade de arestas que vão do vértice arestas que vão do vértice ii ao vértice ao vértice jj e vice- e vice-versa (são adjacentes).versa (são adjacentes).
b
e
e
b 2
2
Exemplo
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 17/33
aa bb cc dd ee
aa 00 11 00 00 00
bb 00 00 11 11 22
cc 00 00 11 11 00
dd 00 00 00 00 11
ee 00 00 00 00 00
Dígrafo e Matriz de AdjacênciaDígrafo e Matriz de Adjacência
c
b
e
d aA
B
C
D
F
G
H
E
cada elemento da matriz é a quantidade de cada elemento da matriz é a quantidade de arestas que vão do vértice arestas que vão do vértice ii ao vértice ao vértice jj (o j é (o j é adjacente ao i).adjacente ao i).
do i
aoje
b 2
Exemplo
18/25 = 72% de nulos
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 18/33
Rede ou Grafo PonderadoRede ou Grafo Ponderado
R = (V, E, R = (V, E, Ψ, ω)Ψ, ω)
Vértices
Arestas ou
Arcos
Função de
Incidência
Função de
Pesos
ω : E ω : E RR (número real)(número real)
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 19/33
Lu = (Isa, He, Lu = (Isa, He, Le, Na)Le, Na)
Exemplo de RedeExemplo de Rede
6
5
8
7
7
4
3
6Isa = {a, b, c, d, e}Isa = {a, b, c, d, e}
He = {A, B, C, D, E, He = {A, B, C, D, E,
F, G, H}F, G, H}Le, NaLe, Na
Le(B)={b, c}, Na(B)=5Le(B)={b, c}, Na(B)=5
Le(A)={a, b}, Na(A)=6Le(A)={a, b}, Na(A)=6
Le(C)={c}, Na(C)=8Le(C)={c}, Na(C)=8
Le(D)={c, d}, Na(D)=7Le(D)={c, d}, Na(D)=7
Le(E) = {b, d}, Na(E)=6Le(E) = {b, d}, Na(E)=6
Le(F) = {d, e}, Na(F)=7Le(F) = {d, e}, Na(F)=7
Le(G) = {b, e}, Na(G)=4Le(G) = {b, e}, Na(G)=4
Le(H) = {b, e}, Na(H)=3Le(H) = {b, e}, Na(H)=3
c
b
e
d a
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 20/33
1 2
3 4
8
12
7
119 10
5 6
13
15
14
1716
a b
g h
edc
f
i j
k n
q
s t
rpo
ml
u v
cucaracha
Passeio (Walk)Passeio (Walk)Seqüência não nula, finita e alternada de vértices adjacentes e arestas incidentes.W = v0e1 v1e2 v2e3 ... ekvk
onde:• 1 k n (nN*)• (ek) = {vk-1, vk}
• Cabeça = 3c4e6f5d3 (fechado)
Exemplos:• Antenas = 1a3c4b2
• W1 = 14t17r14n12n14m10• W2 = 5f6v10h8h10m14
• W3 = 5i15o13l9u5 (fechado)
• W4 = 12n14
1 2
3 4
a b
c3 4
5 6
edc
f
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 21/33
1 2
3 4
8
12
7
119 10
5 6
13
15
14
1716
a b
g h
edc
f
i j
k n
q
s t
rpo
ml
u v
cucaracha
Passeio onde as arestas não se repetem.
Exemplos:• Antenas = 1a3c4b2
Trajeto (Trail)Trajeto (Trail)
• Cabeça = 3c4e6f5d3 (fechado)• Patinha Direita Central = 12n14• T1 = 2b4e6j15p14t17
• T2 = 2b4e6j15p14r17
• T3 = 11k13s16q13l9u5i15j6f5
12
14
n
1 2
3 4
a b
c3 4
5 6
edc
f
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 22/33
1 2
3 4
8
12
7
119 10
5 6
13
15
14
1716
a b
g h
edc
f
i j
k n
q
s t
rpo
ml
u v
cucaracha
Passeio onde os vértices não se repetem.
Exemplos:• Antenas = 1a3c4b2
Caminho (Path)Caminho (Path)
• Patinha Direita Central = 12n14• P1 = 11k13o15j6v10m14t17• P2 = 2b4e6j15p14t17• P3 = 2b4e6j15p14r17
• P4 = 8h10m14
12
14
n
1 2
3 4
a b
c
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 23/33
1 2
3 4
8
12
7
119 10
5 6
13
15
14
1716
a b
g h
edc
f
i j
k n
q
s t
rpo
ml
u v
cucaracha
Ciclo (Cycle)Ciclo (Cycle)
Trajeto fechado (v0=vk).
Exemplos:• Cabeça = 3c4e6f5d3 (fechado)
• Asa Esquerda = 5i15o13l9u5 (fechado)• Patona Direita = 14t17r14 (fechado)• C1 = 6v10m14t17r14p15j6 (fechado)• C2 = 5f6v10m14p15o13l9u5 (fechado)• C3 = 3c4e6v10m14p15o13l9u5d3 (fechado)
15
f
i
o
l
u 5
13
9
14
17
t
r
3 4
5 6
edc
f
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 24/33
DAG (Directed Acyclic Graph)DAG (Directed Acyclic Graph)
Redes PERT (Program Evaluation and Review Technique):DAG ponderado onde os arcos representam atividades, os vértices representam o início e o fim das atividade e os pesos representam intervalos de tempo.
5
3 6
9 4
8
53
5
0 2
3
1
78
8
7
2
6
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 25/33
Árvore (Tree)Árvore (Tree)Grafo acíclico (não possui ciclos) e conexo (existe um caminho entre qualquer par de vértices distintos).
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 26/33
Grafos e Listas de AdjacênciaGrafos e Listas de Adjacência
A
B
C
D
E
A
B
C
D
0E
0
0
0
113
1
1
3
02
01
A lista de adjacência está em ordem
crescente de vértices (do A até o E) de forma
a facilitar a implementação.
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 27/33
Dígrafos e Listas de AdjacênciaDígrafos e Listas de Adjacência
A
B
C
D
E
A
B
C
D
0
E
0
0
0
0
0
1 2 3
1 1
1
3 1
Lista dos Vértices
Lista de Adjacênciado vértice A
Lista de Adjacênciado vértice B
Lista de Adjacênciado vértice C
Lista de Adjacênciado vértice D
Lista de Adjacência do vértice E
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 28/33
ÁrvoreÁrvore
nível 0
nível 1
nível 2
nível 3
A
B C D E F
G H I J K L M
N O P Q R S
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 29/33
Árvore: Nó de uma ÁrvoreÁrvore: Nó de uma Árvorein
form
açã
o
pai
pri
mog
ên
ito
pró
xim
o irm
ão
class TArvore{ private: TAlgumTipo inf; // informação TArvore *pai; // pai TArvore *prim; // primogênito TArvore *prox // próximo irmão // ... public: // ... // operações em uma árvore. // ...};
Não é imprescindível, mas pode ajudar na implementação dos métodos.
ponteiros
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 30/33
Árvore: ligaçõesÁrvore: ligações
F
K L M
R S
L
F 0
K M 0 0
R 0 S 0 0
vem de E
vai para A
vem de Q
vem de Q
vai para Q
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 31/33
Árvore: busca em largura e busca Árvore: busca em largura e busca em profundidadeem profundidade
nível 0
nível 1
nível 2
nível 3
A
B C D E F
G H I J K L M
N O P Q R S
Largura
Pro
fun
did
ad
e
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 32/33
Árvore: Busca em LarguraÁrvore: Busca em Largura
Fila
A
B C D E F
G H I J K L M
N O P Q R S
M
1
2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19
ALGORITMO:enfileire o nó raiz da árvore; enquanto existirem nós enfileirados: desenfileire e marque o nó; para todos os nós filhos deste nó marcado: enfileire o nó filho;
A
B
C
D
E
F
G
H
I JK
S
R
Q
P
O
N
M
L
C++ - Grafos e ÁrvoresC++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni 33/33
Busca em ProfundidadeBusca em ProfundidadeA
B C D E F
G H I J K L M
N O P Q R S
1
2
3
4
5
6
7
8
9
10 11
12 13
14
15
16
17 18
19
ALGORITMO:empilhe o nó raiz da árvore; enquanto existirem nós empilhados: desempilhe e marque o nó; para todos os nós filhos deste nó marcado: empilhe o nó filho;
Pilha
A
F
E
D
C
B
G
I
H NJ
R
S
Q
K
L
M
O
P