ESCOLA DE ENGENHARIA
C++
Instalação Elétrica
Instalação Elétrica
L
Q
u
ad
ro
Tom A
Int
Tom B
Pontos,
conduítes
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
3/33
América do Sul
América do Sul
Fronteir
as entre
Herança
Herança
Relacioname
nto de
especializaçã
Marinho
Marinho
Animal
Animal
Mamífero
Mamífero
Leão
Leão
Homem
Homem
Inseto
Inseto
Mosca
Mosca
Barata
Barata
Peixe
Peixe
C++ - Grafos e Árvores
C++ - 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.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.4
Fluxograma ISO 5807
Fluxograma ISO 5807
u
i+1|L(u
i+1)= mín({L(v)| v
D})
início
M = {u
0}
L(u
0) = 0
L(v) =
v
D
i = 0
L(v) = mín(L(v), L(u
i)+W(u
i, v))
v
D
F
L(v) é a distância
mínima de u
0até v,
v
M
V
M = M
{u
i+1}
i = i + 1
fim
D =
1
1
Processo
s e
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
7/33
Lista
Lista
Cabe
ça
Remove do
começo
Insere no
começo
Insere no
começo
Remove do
meio
Insere no fim
Pilha
Pilha
Cabe
ça
Empilh
a
Empilh
a
Desempil
ha
Desempil
ha
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
9/33
Fila
Fila
Cabe
ça
Enfileira
Desenfile
ira
Desenfile
ira
Desenfile
ira
Enfileira
Grafos e Dígrafos (Graph, Digraph)
Grafos e Dígrafos (Graph, Digraph)
•
V
V
Ø
Ø
•
V
V
E = Ø
E = Ø
•
Ψ : E
Ψ : E
{ {
{
{
v, w}
v, w
}
| v, w
| v, w
V} (Grafo)
V} (Grafo)
•
Ψ : E
Ψ : E
{ (
{
(
v, w)
v, w
)
| v, w
| v, w
V} (Dígrafo)
V} (Dígrafo)
G = (V, E,
G = (V, E,
Ψ)
Ψ)
Vértice
s
Arestas
ou
Arcos
Função
de
Incidênc
ia
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
11/33
Exemplo de Grafo
Exemplo 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
A
B
C
D
F
G
H
E
Outra Geometria do exemplo
Outra Geometria do exemplo
c
b
e
d
a
mude a posição dos
arcos
mude a posição dos
vértices
Os
arcos
podem
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
13/33
Exemplo de Dígrafo
Exemplo de Dígrafo
Pico = (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
Grafo Simples
Grafo Simples
Não possui laços (loops)
Não possui laços (loops)
Não possui arestas múltiplas
Não possui arestas múltiplas
X
X
X
X
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
15/33
Vértices Adjacentes
Vé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
A
a
Dígrafo:
Dígrafo:
o vértice a não
o vértice a
nã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.
Grafo e Matriz de Adjacência
Grafo e Matriz de Adjacência
a
a
b
b
c
c
d
d
e
e
a
a
0
0
1
1
0
0
0
0
0
0
b
b
1
1
0
0
1
1
1
1
2
2
c
c
0
0
1
1
1
1
1
1
0
0
d
d
0
0
1
1
1
1
0
0
1
1
e
e
0
0
2
2
0
0
1
1
0
0
c
b
e
d
A
a
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 i
i
ao vértice j
ao vértice
j
e vice-
e
vice-versa (são adjacentes).
versa (são adjacentes).
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
17/33
a
a
b
b
c
c
d
d
e
e
a
a
0
0
1
1
0
0
0
0
0
0
b
b
0
0
0
0
1
1
1
1
2
2
c
c
0
0
0
0
1
1
1
1
0
0
d
d
0
0
0
0
0
0
0
0
1
1
e
e
0
0
0
0
0
0
0
0
0
0
Dígrafo e Matriz de Adjacência
Dígrafo e Matriz de Adjacência
c
b
e
d
A
a
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 i
i
ao vértice j
ao vértice
j
(o j é
(o j é
adjacente ao i).
adjacente ao i).
do
i
Rede ou Grafo Ponderado
Rede ou Grafo Ponderado
R = (V, E,
R = (V, E,
Ψ, ω)
Ψ, ω)
Vértic
es
Arestas
ou
Arcos
Função
de
Incidên
cia
Função
de
Pesos
ω : E
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
19/33
Lu = (Isa, He,
Lu = (Isa, He,
Le, Na)
Le, Na)
Exemplo de Rede
Exemplo de Rede
6
5
8
7
7
4
3
6
Isa = {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, Na
Le, Na
Le(B)={b, c}, Na(B)=5
Le(B)={b, c}, Na(B)=5
Le(A)={a, b}, Na(A)=6
Le(A)={a, b}, Na(A)=6
Le(C)={c}, Na(C)=8
Le(C)={c}, Na(C)=8
Le(D)={c, d}, Na(D)=7
Le(D)={c, d}, Na(D)=7
Le(E) = {b, d}, Na(E)=6
Le(E) = {b, d}, Na(E)=6
Le(F) = {d, e}, Na(F)=7
Le(F) = {d, e}, Na(F)=7
Le(G) = {b, e}, Na(G)=4
Le(G) = {b, e}, Na(G)=4
Le(H) = {b, e}, Na(H)=3
Le(H) = {b, e}, Na(H)=3
c
b
e
1
2
3
4
8
12
7
11
9
10
5
6
13
15
14
a
b
g
h
e
d
c
f
i
j
k
n
q
s
t
r
p
o
m
l
u
v
cucaracha
Passeio (Walk)
Passeio (Walk)
Seqüência não nula, finita e
alternada de vértices adjacentes
e arestas incidentes.
W = v
0
e
1
v
1
e
2
v
2
e
3
... e
k
v
k
onde:
•
1
k
n (n
N*
)
•
(e
k
) = {v
k-1
, v
k
}
•
Cabeça = 3c4e6f5d3 (fechado)
Exemplos:
•
Antenas = 1a3c4b2
•
W
1
=
14t17r14n12n14m10
•
W
2
= 5f6v10h8h10m14
•
W
3
= 5i15o13l9u5 (fechado)
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
21/33
1
2
3
4
8
12
7
11
9
10
5
6
13
15
14
17
16
a
b
g
h
e
d
c
f
i
j
k
n
q
s
t
r
p
o
m
l
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
•
T
1
= 2b4e6j15p14t17
•
T
2
= 2b4e6j15p14r17
1
2
3
4
8
12
7
11
9
10
5
6
13
15
14
17
a
b
g
h
e
d
c
f
i
j
k
n
q
s
t
r
p
o
m
l
u
v
cucaracha
Passeio onde os vértices não se repetem.
Exemplos:
•
Antenas = 1a3c4b2
Caminho (Path)
Caminho (Path)
•
Patinha Direita Central
= 12n14
•
P
1
=
11k13o15j6v10m14t17
•
P
2
= 2b4e6j15p14t17
•
P
3
= 2b4e6j15p14r17
•
P
4
= 8h10m14
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
23/33
1
2
3
4
8
12
7
11
9
10
5
6
13
15
14
17
16
a
b
g
h
e
d
c
f
i
j
k
n
q
s
t
r
p
o
m
l
u
v
cucaracha
Ciclo (Cycle)
Ciclo (Cycle)
Trajeto fechado (v
0
=v
k
).
Exemplos:
•
Cabeça = 3c4e6f5d3 (fechado)
•
Asa Esquerda = 5i15o13l9u5
(fechado)
•
Patona Direita =
14t17r14 (fechado)
•
C
1
=
6v10m14t17r14p15j6
(fechado)
•
(fechado)
C
2
= 5f6v10m14p15o13l9u5
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
5
3
6
9
4
8
5
3
5
0
2
3
1
7
8
8
7
2
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
25/33
Árvore (Tree)
Árvore (Tree)
Grafos e Listas de Adjacência
Grafos e Listas de Adjacência
A
B
C
E
A
B
C
D
0
E
0
0
1
1
3
1
1
3
0
2
0
1
A lista de adjacência
está em ordem
crescente de vértices
(do A até o E) de forma
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
27/33
Dígrafos e Listas de Adjacência
Dí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ência
do vértice A
Lista de
Adjacência
do vértice B
Lista de
Adjacência
do vértice C
Lista de
Adjacência
do vértice D
Á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
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni
29/33
Árvore: Nó de uma Árvore
Árvore: Nó de uma Árvore
in
fo
rm
a
çã
o
p
a
i
p
ri
m
o
g
ê
n
it
o
p
ró
x
im
o
i
rm
ã
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.
Á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
C++ - Grafos e Árvores
C++ - 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 profundidade
em 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
P
ro
fu
n
d
id
a
d
Á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ó;
A
B
C
D
E
F
G
H
C++ - Grafos e Árvores
C++ - Grafos e Árvores Prof. Lincoln Cesar ZamboniProf. Lincoln Cesar Zamboni