Documente Academic
Documente Profesional
Documente Cultură
09 - Grafuri, Definitii, Reprezentare, Parcurgere
09 - Grafuri, Definitii, Reprezentare, Parcurgere
?
?
?
?
= (, ) graf / graf neorientat (finit)
vrfuri, nevid
muchii (perechi neordonate de vrfuri din V, distincte)
Exemplu
= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
= 1,2 , 1,3 , 1,5 , 2,5 , 2,6 , 4,5 , 4,6 , 7,8 , 7,9
1
= (
1
,
1
),
2
= (
2
,
2
), grafuri
2
1
i
2
1
2
este graf parial al lui
1
2
=
1
i
2
1
2
este subgraf al lui
1
Identificator vrf
(v)
Muchie (e)
4, 5 extremiti, vrfuri adiacente
= (, ) digraf
vrfuri, nevid
arce (perechi ordonate de vrfuri, distincte)
(, , ) graf ponderat
= (, ) graf
: 0, pondere (cost/ctig)
= (, ), =
0
,
1
,,
u-v drum
, = 0,
,
+1
, = 0, 1
Grad vrf, vrf izolat
Muchii
orientate
Graf direcionat
nu neaprat
distincte
Exemple de grafuri
Reeaua de drumuri naionale
Reeaua de strzi dintr-un ora
O reea social
Un labirint
Un circuit electronic
Problema de rezolvat
Alegerea reprezentrii corecte i aplicarea algoritmului
corect, nu inventarea unui algoritm nou
Reprezentri
Matematic
Grafic
Matriceal
Matrice de adiacen
0,1
Matricea ponderilor
, 0,
Tabelar
Matricea muchiilor (2 coloane) i lista vrfurilor izolate
Liste de adiacen
Lista vrfurilor (compact, nlnuit)
Liste de vecini pentru fiecare vrf (nlnuit)
Numrul de vrfuri,
dac snt numerotate (1-n)
= (, )
= 1, 2, 3, 4, 5, 6, 7
= 1,2 , 1,4 , 2,4 , 3,4 , 5,6
1
1
2
2
3
3
4
4
5
5
6
6
7
7
=
0 1 0 1 0 0 0
1 0 0 1 0 0 0
0 0 0 1 0 0 0
1 1 1 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 1 0 0
0 0 0 0 0 0 0
=
1 2
1 4
2 4
3 4
5 6
= 7
2 3 4 6 5 1 7
2
4
1
4
4 1
2
6 5
3
N
N
N
N
N
N
N
N
2
4
1
4
4 1
2
6 5
3
N
N
N
N
N N
1 2 3 4 5 6 7 N
= (, )
= 1, 2, 3, 4, 5, 6, 7
= 1,2 , 1,4 , 2,4 , 3,4 , 5,6
1
1
2
2
3
3
4
4
5
5
6
6
7
7
=
0 1 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
=
1 2
1 4
2 4
3 4
5 6
= 7
2 3 4 6 5 1 7
2
4
4 4 6
N
N N
N
N
N N
= (, )
= 1, 2, 3, 4, 5, 6, 7
= 1,2 , 1,4 , 2,4 , 3,4 , 5,6 , (7,7)
1
1
2
2
3
3
4
4
5
5
6
6
7
7
=
0 1 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 0
0 0 0 0 0 0 1
=
1 2
1 4
2 4
3 4
5 6
7 7
= 7
2 3 4 6 5 1 7
2
4
4 4 6
N
N N
N
N
N
7 N
= (, , )
= 1, 2, 3, 4, 5, 6, 7
= 1,2 , 1,4 , 2,4 , 3,4 , 5,6
= 3, 4, 1, 2, 3
3
3
2
2
3
3
4
4
5
5
6
6
7
7
1
1
4
4
2
2
3
3
1
1
=
3 4
3 1
2
4 1 2
3
3
=
1 2 3
1 4 4
2 4 1
3 4 2
5 6 3
= 7
2 3 4 6 5 1 7 N N
2 3
4 4 N
1 3
4 1 N
4 2 N 1 4
2 1
6 3 N 5 3 N
3 2 N
Tem
Reprezentai un graf direcionat
ponderat, folosind toate formele de
reprezentare anterioare.
Alegerea celei mai bune reprezentri
Citirea de pe un suport extern (fiier text)
Memoria necesar
Grafuri mici , rare / grafuri mari, dense
Numrul de operaii necesare
Gsirea unui vecin, traversare
Verificarea existenei unei muchii
Adugarea/eliminarea unei muchii
Parcurgere (traversare)
Vizitarea vrfurilor, o singur dat, pornind de la un vrf
dat
0
Se pot vizita vrfurile conectate cu vrful iniial (exist
drum
0
)
Ordinea de vizitare NU constituie un drum!
Parcurgere n lime (Breadth First)
Parcurgere n adncime(Depth First)
Parcurgere generalizat n adncime/lime
Parcurgerea n lime
0
= 4
Ordinea de vizitare: 4, 2, 3, 5, 7, 1, 6
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
11
11
10
10
1 2 3 4 5 6 7 8 9 10 11
0 0
1 1 1 0 1 1
2 2 1 1 0 1 1
3 2 1 1 0 1 2 1
4 2 1 1 0 1 2 1
5 2 1 1 0 1 2 1
6 2 1 1 0 1 2 1
7 2 1 1 0 1 2 1
Vector de prini:
= printele lui
1 2 3 4 5 6 7 8 9 10 11
2 4 4 0 4 3 4
1
1
2
2
3
3
4
4
5
5
6
6
7
7
Algoritm
se iniializeaz D, P cu ,
0
= 0,
0
= 0
i=0, gata=0
ct timp gata==0
gata=1
pentru fiecare vrf cu =
reine (viziteaz, prelucreaz )
pentru fiecare vecin (nevizitat) al lui
= + 1
= (opional, prelucreaza muchia - )
gata=0
dac gata==0
i=i+1
Parcurgerea n lime
A matricea de adiacen
C coad
M vector martor, iniializat cu zero
=
0
1
Algoritm
se adaug
0
n coad i marcheaz
0
= 1
ct timp coada nu e vid
se extrage un vrf din coad
se viziteaz (proceseaz)
pentru fiecare vecin nevizitat al lui
se adaug n coad i se marcheaz (
= 1)
opional, se proceseaz muchia -
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
11
11
10
10
Variant
0
= 0,
= 1
la introducerea unui vrf n coad
= + 1
=
La final, vectorul martor va conine distanele pn la fiecare vrf i avem vectorul de prini.
1 2 3 4 5 6 7 8 9 10 11
0 0 0 0 1 0 0 0 0 0 0 0
1 0 1 1 1 1 0 1 0 0 0 0
2 1 1 1 1 1 0 1 0 0 0 0
3 1 1 1 1 1 1 1 0 0 0 0
4 1 1 1 1 1 1 1 0 0 0 0
5 1 1 1 1 1 1 1 0 0 0 0
6 1 1 1 1 1 1 1 0 0 0 0
7 1 1 1 1 1 1 1 0 0 0 0
Parcurgerea n lime,
0
= 4
Ordinea de vizitare: 4, 2, 3, 5, 7, 1, 6
1 1
2
2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
11 11
10 10
=
0 1 1 0 1 0 1 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0
0 1 1 0 1 0 1 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 1 0 1 1
0 0 0 0 0 0 0 1 1 0 1
0 0 0 0 0 0 0 1 1 1 0
= 2, 3, 5, 7
= 3, 5, 7, 1
= 5, 7, 1, 6
= 7, 1, 6
= 1, 6
= 6
=
= 4
Tem
Descriei un algoritm pentru determinarea celei mai scurte ci de
la un vrf dat la fiecare dintre celelalte vrfuri ale unui graf,
folosind vectorul de prini.
Implementai algoritmul descris.
Parcurgerea n adncime
A matricea de adiacen
S stiv
M vector martor, iniializat cu zero
=
0
1
Cnd se viziteaz (prelucreaz) un vrf?
Algoritm DF pentru subprogram recursiv
Se viziteaz i marcheaz
0
Pentru fiecare vecin nevizitat al lui
0
Se apeleaz recursiv parcurgerea, cu ca vrf iniial
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
11
11
10
10
Parcurgerea n adncime,
0
= 4
Ordinea de vizitare: 4, 2, 1, 3, 6, 7, 5
1 1
2
2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
11 11
10 10
1 2 3 4 5 6 7 8 9 10 11
0 0 0 0 1 0 0 0 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0
2 1 1 0 1 0 0 0 0 0 0 0
3 1 1 1 1 0 0 0 0 0 0 0
4 1 1 1 1 0 1 0 0 0 0 0
5 1 1 1 1 0 1 1 0 0 0 0
6 1 1 1 1 1 1 1 1 1 0 0
=
0 1 1 0 1 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0
0 1 1 0 1 0 1 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 1 0 0 0 0
1 0 0 1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 1 0 1 1
0 0 0 0 0 0 0 1 1 0 1
0 0 0 0 0 0 0 1 1 1 0
0
= 2
0
= 1
0
= 3
0
= 6
0
= 7
0
= 5
0
= 4
1
1
2
2
3
3
4
4
5
5
6
6
7
7
Vector de prini:
= printele lui
1 2 3 4 5 6 7 8 9 10 11
2 4 1 0 1 3 6
Parcurgerea generalizat
BF / DF parcurg doar o component conex
Folosind vectorul martor ca parametru pentru funcia de
parcurgere:
repet
alege un vrf nevizitat
0
parcurge pornind de la
0
(BF sau DF)
pn cnd nu mai exist vrfuri nevizitate
Teme
Scriei funcii pentru urmtoarele operaii
Preluarea unui graf dintr-un fiier text (forma tabelar)
pe prima linie n i m, pe fiecare din liniile urmtoare cte o muchie
Obinerea reprezentrii matriceale din cea tabelar
Obinerea reprezentrii cu liste de adiacen *
Parcurgerea n lime
Parcurgerea n adncime
Parcurgerea generalizat