Sunteți pe pagina 1din 21

Definiii, reprezentri, parcurgeri

?
?
?
?
= (, ) 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