Sunteți pe pagina 1din 43

5.

Arbori pari al i
Adeseori apar n practic probl eme a cror
rezolvar e implic noiuni i rezult at e din teori a grafurilor.
S consi der m, de exempl u, proiect ar e a unei re el e de
tel ecomuni ca ii care s conect eze un numr dat de
cent r al e, de ampl as ar e cunoscut , astfel nct ntre
oricar e dou cent r al e s exist e legt ur . Unei astfel de
probl eme i se poat e asoci a un graf neori ent at n care
muli mea vrfurilor est e format din cent r al el e ce
trebui e int erconect at e, iar muli mea muciilor din
per ecil e de cent r al e ntre care se poat e realiza o
legt ur direct . !entru ca ntre oricar e dou cent r al e s
exist e legt ur , ar trebui ca graful s fie conex, dar, ca
n orice probl em practic, intervi ne factorul de cost i
at unci ar fi de dorit s se select eze un numr ct mai
mic posibil de legt uri direct e ntre cent r al e, cu alt e
cuvint e inter es e az un graf pari al conex mini mal al
graful ui, deci un arbor e.
Defi ni i e
"ie # $ %&, U' un graf neori ent at . (umi m arbore
parial al graful ui # un graf pari al care est e arbor e.
Teore m
)ondii a neces ar i suficient ca un graf s
conin un arbor e pari al est e ca graful s fie conex.
Demons t rai e:
Necesi t at ea !resupune m c # $ %&,U' admi t e un
arbor e pari al * $ %&, U+', U+ U. *, fiind arbor e, est e
conex i adugnd la * muciile din U,U+ el rmne
conex. -eci # conex.
Suficien a !resupune m c # est e conex. -ac #
est e conex mini mal, el est e arbor el e pari al cut at .
Altfel, exist o muci e .x,/0 U astfel nct graful #
1
$ %&,
U,1.x,/02' est e conex. -ac #
1
est e conex mini mal,
arbor el e pari al cut at est e #
1
, altfel continu m
procedeul de eliminar e a muciilor pn c nd obinem
un graf conex mini mal, care va fi un arbor e pari al a lui
#.
3.4.-.
178
Observai e
!rocedeul descris are un numr finit de pai,
deoar ece la fiecar e pas est e eliminat o muci e, iar #
are un numr finit de mucii. 5ai mult, put em
demons t r a urmt oar e a propri et at e 6
Propozi i e
"ie # $ %&, U' conex, 7&7 $ n, 7U7 $ m. (umr ul de
mucii ce trebui e nlt ur at e pent r u ca graful s devin
un arbor e est e m, n89 %numrul ciclomat ic al graful ui'.
Demons t rai e:
!resupune m c prin eliminar ea unui numr oarecar e de
mucii din # am obinut un graf #+ fr cicluri %o
pdur e'. "iecar e din component el e conexe ale lui #+ est e
un arbor e.
(otm 6
, p numr ul component el or conexe,
, n
i
numr ul de vrfuri din component a conex i,
i19, :, ..., p2
, m
i
numr ul de mucii din component a conex i,
i19, :, ..., p2.
4vident c m
i
$ n
i
,9, i19, :,. .., p2.
(umr ul de muci din #+ est e
( ) n n p i
i
p
=
=

1
1
-eci au fost eliminat e m, n8p mucii. )nd #+ est e
arbor e, deci conex %p$9', numr ul muciilor eliminat e
est e m, n89.
3.4.-.
; prim probl em, cu aplicaii, de exempl u, n
cimi e ar fi gener ar e a tut uror arborilor pari ali ai unui
graf dat. !ent ru acest a vom folosi met oda bac<t r ac<i ng.
Reprez ent ar ea informa iilor
,=om repr ezent a graful #$ %&, U' cu a>ut orul
mat ricii muciilor, o mat rice # cu dou linii i m coloane
%m $ 7U7', n care pent r u fiecar e muci e reinem cele
dou extr emi t i.
,?eprezent m un arbor e pari al ca un vect or A cu
n, 9 component e, n care reinem indicii din # ai
muciilor arbor el ui. !entru a nu gener a de mai mult e ori
179
acel ai arbor e, vom conveni ca muciile s fie memor at e
n ordinea cresct oar e a indicilor lor din #.
, !ent ru a verifica dac o muci e nou select at nu
formeaz cicluri cu muciile de> a sel ect at e, vom ine
eviden a component el or conexe ntr, un vect or c de
dimensi une n %n $ 7&7', c.i0 dese mn nd component a
conex din care face part e nodul i, pent r u i 19, :, ...,
n2.
Condiii int erne
1. A.i0 19, :, ..., m2, i 19, :, ..., n, 92
2. A.i0 A.i890, i 19, :, ..., n, :2
3. c.#.9, A.i000 c.#.:, A.i000, i 19, :, ..., n, 92
%nu se formeaz cicluri, extr emi t il e muci ei
fiind n component e conexe diferit e'.
proc e dur e Cons trArbor e (i: byt e)
*
//gener eaz toi arborii pariali care au pri mel e i!
muc"ii //#$!%&'''&#$i !%
!ar ": byt e
be#i n
if i $ n t%en //am select at n ! muc"ii care nu formeaz
cicluri
Afi&areArbor e
el s e
//sel ect ez o muc"i e cu indice mai mare dec(t #$i!%
for " :$ A'i( )* +) to m do
if c',' )- "** c',' .- "** t%en
be#i n
A'i* :$ " //sel ect ez muc"i a )
/nifi c( c',' )- "**- c',' .- "**)
//unific component el e cone*e ale e*tre mi t ilor
muc"i ei )
Cons trArbore ( i +) )
0epar( c',' )- "**- c',' .- "**)
//rest aurez situaia dinaint ea sel ect rii muc"i ei
)
end
end
*
!rogr amul +enerare #rbori ,ar- iali de la sf r@ itul capit ol ul ui curent
gener e az A to Bi arborii par B iali ai unui graf conex dat.
180
Cniial, c.i0 6$ i, i 19, :, ..., n2i apel m
)onstrArbor e% 9'.
5. ). Arbori pari al i de cos t mini m
Uneori nu int er es e az gener ar e a tut uror arborilor
pari ali ai unui graf conex ci numai a celor care satisfac
anumi t e condiii de opti m. -e exempl u, pent r u
proiect ar e a re el ei de telecomuni ca ii ar fi int er es ant
obiner ea unui arbor e pari al care s mini mizeze
celt ui elile.
=om consider a n continuar e o funci e c6 U ?
8
,
care asoci az fiecr ei mucii din graf un cost %n
exempl ul nost ru, s spune m, dist an a ntre dou
cent r al e'. -efinind cost ul unui arbor e pari al ca fiind
suma cost urilor muciilor arbor el ui, se pune probl ema
obinerii unui arbore parial de cost mini m .
-e exempl u, fie urmt or ul graf6
"ig. 9.
Acest graf admi t e mai muli arbori pari ali de cost mini m,
de exempl u6
"ig. :.
5.1.1. Al#ori t mul lui 1rus2al de det er mi nar e a
181
unui arbore pari al de cos t mini m
3

"ie # $ %&, U' un graf conex i c6 U ?
8
o funci e
cost. !ent ru a det er mi na un arbor e pari al de cost
mini m, se pleac de la o pdur e format din n arbori %n
$ &', fiecar e arbor e fiind format dintr, un singur vrf.
Da fiecar e pas se sel ect eaz o muci e de cost mini m
care nu a mai fost select at i care nu formeaz cicluri
cu cele de> a select at e. S consider m de exempl u, graful
din figura 9. Cniial6
"ig. E.
Select nd o muci e de cost 9, obinem6
*
!rogr amul .rus/al de la sf r@ itul capit ol ul ui curent gener e az A un
arbor e par B ial de cost mini m al unui graf conex, utiliz nd algorit mul
lui Frus<al.
182
"ig. G.
-eci am unificat arborii corespunzt ori
extr emi t ilor muci ei
sel ect at e. Select m din nou o muci e de cost ul mini m 96

"ig. H.
Da acest pas nu mai put em select a o muci e de
cost 9, deoar ece s, ar obine un ciclu. Select m muci a
de cost :6
"ig. I.
Select nd, n final, muci a de cost E, obinem un
graf fr cicluri maxi mal , deci un arbor e6
"ig. J.
183
Da fiecar e pas al algorit mul ui sunt unificai doi
arbori, cei corespunzt ori extr emi t ilor muci ei
sel ect at e. -eci, dup n, 9 pai, pdur ea iniial va fi
transfor mat ntr, un singur arbor e.
!ent ru implement ar e a algorit mul ui est e neces ar
rezolvar ea urmt oar el or dou probl eme6 cum extr age m
muci a de cost mini m i cum test m dac muci a
sel ect at formeaz sau nu cicluri cu cele de> a select at e.
!ent ru a extr age mini mul, o prim idee ar fi s
sort m muciile cresct or dup cost i s parcur ge m
secven i al muciile ordonat e. Kn cazul n care arbor el e
pari al de cost mini m est e gsit suficient de repede, un
numr mar e de mucii rmn net es t at e i n acest caz s,
ar pierde timp inutil cu sort ar ea acest or mucii. ; alt
idee, mai eficient , ar fi s organizm muciile grafului
ca un min, eap, struct ur ce per mi t e extr ager e a
eficient a mini mul ui.
!ent ru a test a dac o muci e formeaz cicluri cu
muciile de> a sel ect at e est e suficient s test m dac
extr emi t il e muci ei se gs esc n aceeai component
conex. !ent ru aceas t a va trebui s inem per mane nt
eviden a component el or conexe %arborilor' care se
formeaz.
Reprez ent ar ea informa iilor
9.=om memor a graful ntr, un vect or # cu m %m $ U'
component e, fiecar e component fiind o nregist r ar e
cele dou extr emi t i i cost ul muci ei6
5ucie $ record
e9, e:6 =fL
cost6 realL
endL
:. Arborel e pari al de cost mi mi m se va memor a ntr, un
vect or A cu n, 9 component e ce reine indicii din # ai
muciilor sel ect at e
E. 4viden a component el or conexe o vom ine cu
a>ut orul unui vect or c cu n component e, c.i0 $
component a conex crei a i apar i ne vrful i.
)omponent el e conexe vor fi identificat e printr, un
repr ezent a nt %vrful cu indicel e cel mai mic din
component a conex respect i v'.
184
Teore m
Algorit mul lui Frus<al gener eaz un arbor e pari al
de cost mini m.
Demons t rai e:
9. Algorit mul select eaz numr ul maxi m de mucii
care nu formeaz cicluri, deci, confor m teor emei de
caract erizar e a arborilor, se obine un arbor e pari al.
:. S demons t r m c arbor el e pari al obinut n
urma aplicrii algorit mul ui lui Frus<al est e un arbor e
pari al de cost mini m 6
"ie A $ %a
9
, a
:
, ..., a
n,9
' muciile arbor el ui rezult at n
urma aplicrii algorit mul ui, n ordinea select rii lor.
!resupune m prin reducer e la absur d c arbor el e
obinut nu est e de cost mini m, deci exist A+ $ %a
9
+,
a
:
+, ...., a
n,9
+' un alt arbor e pari al, astfel nct c%A+' M
c%A'.
"ie < $ min1i 7 9 i n, a
i
a
i
+ 2, pri mul indice de la
care A i AN difer.
-eci A $ %a
1
, a
2
, ..., a
i-1
, a
i
, ..., a
n-1
'
A+ $ %a
1
, a
2
, ..., a
i-1
, a
i
+, .., a
n-1
+', cu a
i
a
i
+ .
4vident c%a
i
' c%a
j
+', > 1i, ..., n, 92, altfel
algorit mul ar fi select at muci a a
j
+ n loc de a
i
, deoar ece
ar fi avut cost mai mic i nu formeaz cicluri cu a
1
,..., a
i-1
.
Adaug la A+ muci a a
i
. Se formeaz un ciclu n care
int ervin doar mucii din 1a
i
+... a
n-1
+ 2. 4limin una din
muciile ciclului diferit de a
i
. Se obine un arbor e AO $
%a
1
,..., a
i-1
, a
i
, a
i89
O..., a
n-1
O' care are i mucii comune cu A.
Kn plus c%AO', c%A+' $ c%a
i
',c%a
j
+' P c%AO' c%A+'.
?epet m procedeul de nlocuire a muciilor din A+
cu muciile din A. ;binem c%A+' c%AO' ... c%A'.
-ar am presupus c c%A+' M c%A' contr adi ci e.
-eci A est e un arbor e pari al de cost mini m.
3.4.-.
Compl e*i t at ea algorit mul ui
;rganizar ea muciilor ca un min, eap est e de
O0m1 , m $ U. Algorit mul cercet eaz n cel mai
defavor abil caz toat e cele m mucii pent r u a select a n, 9,
la fiecar e pas fiind neces ar extr ager e a muci ei de cost
mini m, oper ai e de ;%log m' $ O0log n1 . Select ar e a unei
185
mucii implic i o oper ai e de unificar e a doi arbori, al
crei timp de execui e depi nde de met oda de unificar e
aleas .
5. ). .. Al#ori t mul lui Prim de det ermi nar e a
unui arbore pari al de cos t mini m
3

)a i algorit mul lui Frus<al, algorit mul lui !rim
utilizeaz o strat egi e #reed/. Cniial se pleac de la un
arbor e format dintr, un singur vrf. Da fiecar e pas se
sel ect eaz o muci e de cost mini m astfel nct muli mea
A a muciilor sel ect at e i muli mea Q a vrfurilor unit e
de acest e a s formeze un arbor e.
-e exempl u, s consider m graful din figura 9 i vrful
de st art H. Cniial
"ig. R.
Select m o muci e de cost mini m care s fie incident
cu vrful H6
"ig. S.
*
!rogr amul ,rim de la sf r@ itul capit ol ul ui curent gener e az A un
arbor e par B ial de cost mini m al unui graf conex, utiliz nd algorit mul
lui !rim.
186
Select m o muci e de cost mini m, care s fie incident
cu unul din vrfurile din subgr aful obinut la pasul
ant eri or6
"ig. 9P.
Select ez o muci e de cost 9, incident cu unul din
vrfurile din subgr af ul ant eri or6
"ig. 99.
Select nd cea de a pat r a muci e, obinem un arbor e
pari al de cost mini m6
"ig. 9:.
Da fiecar e pas se sel ect eaz un nou vrf, adi acent cu
unul din vrfurile subgr aful ui, astfel nct muci a
corespunzt oar e s fie de cost mini m. (odul nou
adugat va fi ter mi nal i deci nu se vor obine cicluri, iar
subgr aful const r ui t est e la fiecar e pas conex, deci
arbor e.
Reprez ent ar ea informa iilor
1. ?epr ezent m graful prin mat ricea cost urilor, )
nxn
187
C i j
U
U
i j
,
),
,
=

=
R
S
|
|
T
|
|
L
N
M
M
O
Q
P
P
L
N
M
M
O
Q
P
P
L
N
M
M
O
Q
P
P
, dac i,>
c% i,> dac i,>
dac 0
:. T va fi muli mea vrfurilor nes el ect at e n subgr af %T $
&,Q'.
E. =om utiliza un vect or <e/, de dimensi une n, n care
pent r u fiecar e vrf x T vom reine cost ul mini m al
muciilor ce unesc vrful x cu un vrf v din subgr af6
<e/.x0 $ min1c%.x, v0' v Q2, x &UQ.
4vident , dac astfel de mucii nu exist <e/.x0 $ 8 .
G. ?einem arbor el e pari al de cost mini m, memor nd
vrfurile grafului n ordinea n care au fost atinse ntr, un
vect or p de dimensi une n.
p.x0 $ vrful din care a fost atins x.
proc e dur e Prim
//det er mi n 2 un #,3 al unui graf4 matricea cost urilor c&
num 2rul de
// v (rfuri n 5 i v (rful de start r sunt variabile global e
!ar 4- "- i: 5f 2ey: array' 5f * of real
6: set of 5f p: array' 5f * of 5f
be#i n
//iniializare
for 4 :$ ) to n do 2ey'4* +;
2ey'r* := 7 p'r* :$ 7 := ')- .- ...- n* ( 'r*
8%ile 6 [] do //e*ist v(rfuri nesel ect at e
be#i n
i := 4tra#e9in(6) //e*trage din 6 v(rful de c"eie mini m
for " :$ ) to n do //act ualizez c"eile v(rfurilor
din 6
if C'i- "* t%en // i 7i ) sunt adiacent e
if (" 6) and (2ey'"* : C'i- "*) t%en
be#i n
p'"* :$ i
2ey'"* :$ C'i- "*
end
188
end
end
Compl e*i t at ea algorit mul ui
Algorit mul execut n, 9 pai, la fiecar e pas
sel ect nd un vrf din graf de cei e mini m i
react ualiznd ceile vrfurilor nesel ect at e, oper a i e de
;%n'. -eci algorit mul est e de ordinul O0n
2
1'
5. .. Arbori pari al i ;<0
8readt " 9irst Searc" est e tenica de explor ar e a
grafurilor n li me.
-at fiind un graf conex # $ %&, U' i un nod surs s
&, met oda 89S impune vizitar ea mai nti a nodul ui s,
apoi a tut uror nodurilor nevizit at e adi acent e cu s, apoi a
tut uror nodurilor nevizit at e adi acent e nodurilor
adiacent e cu s, . a. m. d.
-e exempl u, pent r u graful din figura de mai >os,
parcur ger e a V"S, cu nodul surs s $ I, est e6 I, G, H, R, S,
:, E, J, 9P, 99, 9, 9:.
"ig. 9E.
?einnd toat e muciile utilizat e n timpul
parcur gerii obinem arbor el e pari al V"S, cu rdci na s $
I %figura 9G'6 .I,G0, .I,H0, .I,R0, .I,S0, .G,:0, .G,E0, .H,J0,
.R,9P0, .S,990, .:,90, .99, 9:0.
189
"ig. 9G.
Observai e
!entru orice vrf v din arbor e, lan ul unic care
unet e rdci na s de v repr ezi nt lan ul cu numr mini m
de mucii de la s la v n graf.
Reprez ent ar ea informa iilor
9. ?epr ezent m graful prin list el e de adi acen .
#6 arra/.=f0 of DistaL
-eci pent r u fiecar e vrf din graf reinem list a
vrfurilor adi acent e cu vrful respecti v.
:. Arborel e pari al V"S l repr ezent m cu a>ut or ul unui
vect or W n care pent r u fiecar e vrf reinem vrful din
care a fost atins n timpul parcurgerii V"S.
W6 arra/ [=f0 of =fL
E. Utilizm un vect or boolean =, n care pent r u fiecar e
vrf din graf reinem dac a fost sau nu atins n
timpul parcurgerii V"S.
=6 arra/.=f0 of bool eanL
G. !entru parcur ger e a graful ui n li me vom utiliza o
coad pe care o iniializm cu vrful surs. Da fiecar e
pas extr age m un element din coad, vizitm toat e
vrfurile nevizit at e adi acent e cu vrful extr as i le
inser m n coad, reinnd pent r u fiecar e vrf vizitat
vrful din care a fost atins, pent r u reconsti t uirea
arbor el ui pari al V"S.
Observai e
#, W, n %numr ul de vrfuri din graf' i s %vrful
surs' sunt variabil e global e.
proc e dur e ;<0
3

*
!rogr amul #rbori ,ar- iali89D9 de la st r@ itul capit ol ul ui curent
gener e az A arborii par B iali V"S @ i -"S ai unui graf conex dat.
190
//parcurge :n li me graful +& :ncep(nd cu v(rful s
construi nd //arborel e parial 89S
!ar C: Coada =: >ista i: 5f
5: array' 5f * of bool e an
be#i n
for i :$ ) to n do 5'i* :$ fal s e
C s //iniializez coada cu v(rful surs
8%il e C '* do
be#i n
4 C //e*trage un v(rf * din coad
= :$ ,'4*
8%il e = nil do //parcurg lista de adiacen a
nodul ui *
be#i n
i :$ =?. i nf
if not 5'i* t%en // nodul i est e nevizit at
be#i n
5'i* :$ true
T'i* :$ 4 //rein v(rful din care a fost
atins i
C i @ /introduc v(rful i :n coad
end
= :$ =?. urm
end
end
end
Observaii
9. -ac graful # nu est e conex parcur gnd V"S fiecar e
component conex obinem o pdur e, format din
arborii par Biali corespunzt ori fiecr ei component e
conexe.
;' Compl e*i t at ea algorit mul ui, n cazul n care graful
est e repr ezent at prin list el e de adi acen , est e de
O0n<m1 , unde n est e numr ul de vrfuri, iar m numr ul
de mucii din graf.
5. A. Arbori pari al i D<0
; alt tenic de parcur ger e %explor ar e' a
191
grafurilor est e met oda Dept " 9irst Searc" %parcur ger e a
n adnci me'.
-at fiind # un graf conex i un nodul surs s
vizitm mai nt i nodul s, apoi pri mul nod nevizit at
adiacent cu s, mergnd n adnci me ct est e posibil.
)nd un nod x nu mai are vecini nevizit ai ne ntoarce m
s cercet m dac nodul din care a fost atins x mai are
sau nu vecini nevizit ai i continu m parcurger e a.
-e exempl u, pent r u graful din figura 9E,
parcur ger e a dup met oda -"S, cu nodul iniial s $ I,
det er mi n urmt oar e a ordine de vizitar ea a nodurilor6 I,
G,:, 9, E, J, H, R, S, 9P, 99, 9:. 5arcnd muciile utilizat e prin
vizitar ea nodurilor obinem un arbor e pari al numi t
arbor e pari al -"S, cu rdci na s $ I %figura 9H'6 .I,G0,
.G,:0, .:,90, .:,E0, .E,J0, .J,H0, .H,R0, .R,S0, .S,9P0, .9P, 990,
.99, 9:0.
"ig. 9H.
Observai e
?eprezent ar e a informa iilor se face n acel ai mod
ca la parcur ger e a V"S, n plus vect orul = fiind de
aseme ni variabil global .
Algorit mul poat e fi descris folosind o procedur
recursiv -"S, pe care iniial o apel m cu par amet r ul s,
astfel6
proc e dura DFS(x: Vf);
//parcurge vrfurile nevizitate ale grafului ncepnd cu
x
be#i n
5'4* :$ true
= :$ ,'4*
8%il e = nil do //parcurg lista de adiacen a
v(rfului *
192
be#i n
i :$ =?. i nf
if not 5'i* t%en @ /i est e nevi zit at
be#i n
T'i* :$ 4 //rein v(rful din care a fost atins
i
D<0(i ) //parcurge v(rfurile nevi zit at e
:ncep(nd cu i
end
= :$ =?. urm
end
end
Observaii
9. -ac graful # nu est e conex parcur gnd -"S fiecar e
component conex obinem o pdur e, format din
arborii par Biali corespunzt ori fiecr ei component e
conexe.
:. )ompl exit at e a algorit mul ui, n cazul n care graful
est e repr ezent at prin listel e de adiacen est e de
O0n<m1 , unde n est e numr ul de vrfuri, iar m numr ul
de mucii din graf.
5. B. Aplica Cie. Des c ompun e r e a unui #raf Dn
compon e n t e bicone 4 e
Defi ni i e
"ie # $ %&, U' un graf neori ent at conex. =rful v
& se nume t e punct de articulai e dac subgr aful
obinut prin eliminar ea vrfului v i a muciilor incident e
cu acest a nu mai est e conex.
-e exempl u, pent r u graful din figura 9I punct el e
de articul ai e sunt 9,E, H, J.
193
"ig. 9I.
Defi ni i e
Un graf se nume t e bicone* dac nu are punct e
de articul ai e.
Kn mult e aplicaii practice, ce se pot model a cu
a>ut orul grafurilor, nu sunt de dorit punct el e de
articul ai e. ?eveni nd la exempl ul cu re eaua de
tel ecomuni ca ii, dac o cent r al dintr, un punct de
articul ai e se defect e az rezult at ul est e nu numai
ntrer uper e a comuni crii cu cent r al a respect i v ci i cu
alt e cent r al e.
Defi ni i e
; compone nt bicone* a unui graf est e un
subgr af biconex maxi mal cu aceas t propri et at e.
-e exempl u, pent r u graful din figura 9I
component el e biconexe sunt 6
"ig. 9J.
!ent ru a descompune graful n component e biconexe
vom utiliza propri et il e parcur gerii -"S. !arcurgnd
graful -"S put em clasifica muciile graful ui n6
,mucii care apar i n arbor el ui pari al -"S %tree
edges'L
,mucii .u, v0 care nu apari n arbor el ui i care
unesc vrful u cu un strmo al su v n arbor el e pari al
-"S numi t e mucii de ntoarcer e %bac< edges'. Acest ea
194
sunt marcat e n exempl u punct at .
-e exempl u graful de mai sus poat e fi redes ena t ,
clasificnd muciile innd cont de arbor el e pari al -"S
cu rdci na E6
"ig. 9R.
;bserv m c rdci na arbor el ui pari al -"S est e punct
de articul ai e dac i numai dac are cel puin doi
descende n i , ntre vrfuri din subar bori diferii ai
rdci nii neexi st nd mucii. 5ai mult, un vrf x oarecar e
nu est e punct de articul ai e dac i numai dac din orice
fiu / al lui x poat e fi atins un strmo al lui x pe un lan
format din descende n i ai lui x i o muci e de ntoarcer e
%un drum Xde sigur an Y ntre x i /'.
!ent ru fiecar e vrf x al grafului put em defini 6
dfn0*1 = numr ul de ordine al vrfului x n parcur ger e a
-"S a graful ui %dept " first number '.
-e exempl u6
x 0 1 2 3 4 5 6 7 8 9
dfn(x
)
2 1 3 0 4 5 6 7 8 9
-ac x est e un strmo al lui / n arbor el e pari al -"S
at unci
dfn%x' M dfn%/'.
-e aseme ni pent r u fiecar e vrf x din graf put em defini
6
lo=0*1 = numr ul de ordine al pri mul ui vrf din
parcur ger e a -"S ce poat e fi atins din x pe un alt lan
195
dect lan ul unic din arbor el e pari al -"S.
loZ%x' $ min1dfn%x', min1 loZ%/' 7 / fiu al lui x 2,
min1dfn%/' 7 .x,/0 muci e de ntoarcer e2.
-e exempl u6
x 0 1 2 3 4 5 6 7 8 9
dfn(x
)
2 1 3 0 4 5 6 7 8 9
low(x
)
2 1 1 0 1 5 5 5 8 9
-eci put em caract eriza mai exact punct el e de
articul ai e dintr, un graf astfel6
x est e punct de articul ai e dac i numai dac est e
rdci na unui arbor e pari al -"S cu cel puin doi
descende n i sau, dac nu est e rdci n, are un fiu /
astfel nct loZ%/' dfn%x'.
!ent ru exempl ul din figura 9I6
, nodul E est e punct de articul ai e deoar ece est e
rdci na arbor el ui pari al -"S i are doi descenden i ,
, nodul J est e punct de articul ai e deoar ece
loZ%R' $R dfn%J' $J,
, nodul H est e punct de articul ai e deoar ece
loZ%I' $H dfn%H' $H,
, nodul 9 est e punct de articul ai e deoar ece
loZ%P' $: dfn%9' $9.
5odificm procedur a -"S, pent r u a calcul a pent r u
fiecar e vrf din graf valorile dfn i loZ.
Cntrar e6, graful #, repr ezent a t prin list el e de adi acen L
Ceire6, vect orii dfn i loZ.
Utilizm o variabil global num, pent r u a calcul a
numr ul de ordine al vrfului curent n parcur ger e a n
adnci me.
@@ >niializare
num :$ 7
for 4 :$ ) to n do dfn' 4* :$ ()
Dfn>o8( s - ()) // s est e rdcina arborel ui parial D9S
proc e dur e Dfn>o8( u- tu: 5f)
//parcurge D9S graful + :ncep(nd cu v(rful u&
196
calcul(nd
// valorile dfn$u% 5 i lo=0u14 tu est e tatl lui u
!ar =: >ista 4: 5f
be#i n
dfn' u* :$ num lo8' u* :$ dfn' u* inc( num)
= :$ ,'u*
8%il e = nil do //parcurg lista de adiacen a lui u
be#i n
4 :$ =?. i nf
if dfn' 4* $ () t%en @@4 es t e ne!i zi t at
be#i n
Dfn>o8( 4- u)
lo8' u* :$ min(l o8' u* - lo8' 4* )
//funci a min ret urneaz mini mul
argume nt el or ei
end
el s e
if 4 tu t%en lo8' u* :$ mi n(l o8' u* -
dfn' 4* )
= :$ =?. urm
end
end
=om folosi aceas t idee de calcul recursiv al
valorilor dfn i loZ pent r u descompuner e a n
component e biconexe a unui graf neori ent at conex.
?epr ezent ar e a informa iilor se face n acel ai mod
ca la parcur ger e a -"S, dar vect or ul = nu mai est e
neces ar, pent r u vrfurile nevizit at e dfn fiind ,9. Kn plus,
vom folosi o stiv S n care vom reine muciile din graf
%at t cele care apari n arbor el ui ct i cele de ntoarcer e'
n ordinea n care sunt ntl nit e n timpul parcurgerii.
Atunci cnd identificm o component biconex, mai
exact identificm un nod u care are un fiu x astfel nct
loZ%x' dfn%u', eliminm din stiv i afim toat e
muciile din component a biconex respect i v.
@@ >niializare
num :$ 7
0 (s- ()) 4
//stiva est e iniializat cu o muc"i e fictiv $s& !%& s fiind
197
sursa
for 4 :$ ) to n do dfn' 4* :$ ()
;icone 4( s - ()) // s est e rdcina arborelui parial
D9S
proc e dur e bicone 4( u- tu: 5f)
3

//afi7eaz component el e bicone* e & parcurg(nd graful
:ncep(nd
// cu v(rful u4 tu est e tatl lui u
!ar =: >ista 4: 5f
be#i n
dfn' u* :$ num lo8' u* :$ dfn' u* inc( num)
= :$ ,'u*
8%il e = nil do // parcurg lista de adiacen a lui u
be#i n
4 :$ =?. i nf
if (tu 4) and (df n' 4* E dfn' u* ) t%en 0
'u- 4*
//dac tu =* sau dfn0*1?df n0 u1 muc"i a 0u& *1 a fost
de)a
//reinut :n stiv
if dfn' 4* = () t%en //* est e nevizit at
be#i n
;icone 4( 4- u)
lo8' u* :$ mi n(l o8' u* - lo8' 4* )
if lo8' 4* dfn' u* t%en
//am identificat o nou compone nt
bicone*
Afisare( 4- u) @@ e*trage din S 7i
afi7eaz muc"iile //component ei
bicone* e curent e
el s e
if 4 tu t%en lo8' u* :$ min(l o8' u* -
dfn' 4* )
end
= :$ =?. urm
*
!rogr amul Compone nt e 8icone* e de la sf r@ itul capit ol ul ui curent
realizeaz A descompuner e a n compone nt e biconexe a unui graf
neori ent at conex.
198
end
end
Observai e
;ricare dou component e biconexe au cel mult un
vrf comun, deci nici o muci e nu poat e fi n dou
component e biconexe.
S urmri m execui a algorit mul ui pe urmt or ul
exempl u6
"ig. 9S.
Arborel e pari al -"S est e6
"ig. :P.
Fnii al:
4 7 ) . A B 5 G H
dfn(
4)
,9 ,9 ,9 ,9 ,9 ,9 ,9 ,9
lo8(
4)
num P
S6
E ,9
Apel ez bicone 4( A- ())
4 7 ) . A B 5 G H
199
dfn(
4)
,9 ,9 ,9 P ,9 ,9 ,9 ,9
lo8(
4)
P
num 9
x 9
0:
E 9
E ,9
Apel ez bicone 4( )- A)
4 7 ) . A B 5 G H
dfn(
4)
,9 9 ,9 P ,9 ,9 ,9 ,9
lo8(
4)
9 P
num :
x P
0:
9 P
E 9
E ,9
Apel ez bicone 4( 7- )):
4 7 ) . A B 5 G H
dfn(
4)
: 9 ,9 P ,9 ,9 ,9 ,9
lo8(
4)
: 9 P
num E
x 9
Ie!i n Dn bicone 4( )- A)
loZ.90 min%loZ.90, loZ.P0' = loZ.90
loZ.P0 [ dfn.E0. Am obinut o component
biconex, afiez ')- 7* .
0:
200
E 9
E ,9
x :
0:
9 :
E 9
E ,9
Apel ez bicone 4( .- ))
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P ,9 ,9 ,9 ,9
lo8(
4)
: 9 E P
num G
x 9
x G
0:
: G
9 :
E 9
E ,9
Apel ez bicone 4( B- .)
4
7 ) . A B 5 G H
dfn(
4)
: 9 E P G ,9 ,9 ,9
lo8(
4)
: 9 E P G
num H
x :
x E
0:
G E
: G
201
9 :
E 9
E ,9
loZ.G0 min%loZ.G0, dfn.E0' = P
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G ,9 ,9 ,9
lo8(
4)
: 9 E P P
Ie!i n Dn bicone 4( .- ))
loZ.:0 min%loZ.:0, loZ.G0' = P
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G ,9 ,9 ,9
lo8(
4)
: 9 P P P
Ie!i n Dn bicone 4( )- A)
loZ.90 min%loZ.90, loZ.:0' = P
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G ,9 ,9 ,9
lo8(
4)
: P P P P
loZ.90 min%loZ.90, dfn.:0'
Ie!i n Dn bicone 4( A- ())
loZ.E0 min%loZ.E0, loZ.90' loZ.90 = dfn.E0.
Am obinut o nou component biconex6 'B- A* - '.- B* -
')- .* - 'A- )* .
0:
E ,9
x G
loZ.E0 min%loZ.E0, dfn.G0' = P
x H
0:
E H
E ,9
Apel ez bicone 4( 5- A)
202
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G H ,9 ,9
lo8(
4)
9 P P P P H
num I
x E
x I
0:
H I
E H
E ,9
Apel ez bicone 4( G- 5)
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G H I ,9
lo8(
4)
9 P P P P H I
num J
x H
x J
0:
I J
H I
E H
E ,9
Apel ez bicone 4( H- G)
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G H I J
lo8(
4)
9 P P P P H I J
num R
x H
203
0:
J H
I J
H I
E H
E ,9
loZ.J0 min%loZ.J0, dfn.H0' = H
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G H I J
lo8(
4)
9 P P P P H I H
x I
Ie!i n Dn bicone 4( G- 5)
loZ.I0 min%loZ.I0, loZ.J0' = H
4 7 ) . A B 5 G H
dfn(
4)
: 9 E P G H I J
lo8(
4)
9 P P P P H H H
loZ.I0 min%loZ.I0, dfn.J0' = H
Ie!i n Dn bicone 4 (5- A)
loZ.H0 min%loZ.H0, loZ.I0' = H
loZ.I0 [ dfn.H0, deci afiez o nou component
biconex6 'H- 5* - ' G- H* - ' 5- G* .
0:
E H
E ,9
Ie!i n Dn bicone 4( A- ())
loZ.E0 = min%loZ.E0, loZ.H0' = P
loZ.H0 = dfn.E0, deci afiez o nou component biconex6
'5- A* .
0:
E ,9
0top
Teorem
204
!rocedur a bicone*0 s& !1 gener e az component el e
biconexe ale grafului conex #.
Demons t rai e:
=om lua n consider ar e cazul n care n, numr ul de
vrfuri din #, est e cel puin : %dac n = 9, # are o
singur component biconex, format dintr, un singur
vrf'.
=om face demons t r a i a prin induci e dup V,
numr ul de component e biconexe.
!%9' V = 9 graful est e biconex6 rdci na s a
arbor el ui pari al -"S va avea un singur fiu, s, l not m x.
Apelul bicone*0 *& s1 a explor at toat e muciile graful ui i
le, a introdus n stiva S. )um x est e singurul vrf pent r u
care loZ.x0 dfn.s0, muciile graful ui vor fi afiat e ntr, o
singur component biconex.
!%V' S presupune m acum c algorit mul
funcioneaz corect pent r u toat e grafurile conexe cu cel
mult V component e biconexe.
!%V89' =om demons t r a c algorit mul funcioneaz
pent r u toat e grafurile conexe cu cel mult V+9
component e biconexe.
"ie # un graf cu V+9 component e biconexe i fie x
primul vrf pent r u care est e ndeplinit condii a loZ.x0
dfn.u0. !n n acest moment nu a fost identificat nici o
component biconex. Kn urma apel ului bicone*0 *& u1&
toat e muciile incident e cu descende n i ai lui x se afl n
stiva S, deas upr a muci ei .u, x0. )um x est e pri mul vrf
care ndepline t e condii a loZ.x0 dfn.u0, deduce m c
descende n ii lui x nu sunt punct e de articul ai e. )um u
est e punct de articul ai e, rezult c muciile situat e n S,
deas upr a muci ei .u, x0, inclusiv, formeaz o
component biconex. 5uciile acest ei component e
biconexe sunt extr as e din stiv i afiat e, deci, de la
acest pas algorit mul revine la aflarea component el or
biconexe ale unui graf #N, obinut din # prin eliminar ea
unei component e biconexe. )um #N are V component e
biconexe, confor m ipot ezei inductive, algorit mul
det er mi n corect component el e biconexe ale lui #N.
3.4.-.
205
Observai e
Algorit mul de descompuner e n component e
biconexe a unui graf repr ezent at prin listel e de
adiacen est e liniar %O0n +m1 ', unde n est e numr ul de
vrfuri, iar m numr ul de mucii din graf.
5.5. ProblemJ rezol!atJ
Probl e ma b rfei
8ara)& #rad !@@;
Se consi der n persoane !
9
, !
:
, ..., !
n
care doresc
fiecar e s trans mi t propri a b rfa celorlalt e persoane.
(umi m instruci une o perece %i, >' av nd urmt or ul
efect 6 persoana !
i
trans mi t e persoanei !
>
propri a sa
b rf, dar i event ual el e b rfe primit e ant eri or prin
instruci uni de la alt e persoane. -in pcat e anumi t e
per eci de persoane, citit e de la intrar e, se du mne s c i
deci nu comuni c ntre ele. S se det er mi ne, dac est e
posibil, o secven de instruci uni prin care fiecar e
persoan s cunoas c b rfele tut uror celorlalt e
persoane.
Solui e 6
Asociem probl emei un graf neori ent at astfel6
,muli mea v rfurilor est e format din cele n
persoane.
,ntre dou v rfuri exist muci e dac cele dou
persoane corespunzat oar e comuni c.
!robl ema are solui e dac i numai dac graful
asoci at probl emei est e conex.
-ac graful est e conex, at unci admi t e un arbor e
pari al. -et er mi n m un arbor e pari al -"S al graful ui
dat, cu rdci na 9. !arcurg nd acest arbor e n
post ordi ne, toat e b rfele vor fi recepi onat e de v rful 9,
fiecar e muci e utilizat repr ezent nd o instruci une.
!arcurg nd arbor el e n preor di ne, nodul 9 va trans mi t e
b rfele tut uror celorlalt e persoane. Sunt astfel neces ar e
:n, : instruci uni.
Observai e
(umr ul de :n, : instruci uni est e opti m.
Reprez ent ar ea informa iilor
,?eprezent m graful prin mat ricea de adi acen 6
206

g i j ,
,
,
=
0
1
altfel.
dac i i > comunicL
{

,?eprezent m arbor el e pari al -"S ca pe un arbor e
binar, utiliz nd repr ezent ar e a fiu, frat e.
,Utilizam un vect or v de dimensi une n, pent r u a marca
dac un v rf a fost sau nu atins n timpul parcur gerii
-"S6
v i =
0
1
,
,
altfel.
dac i a fost vizitatL
{
program barfa;
const NMaxPers = 7;
type Pers = 0..NMaxPers;
Arbore = ^NodArbore;
NodArbore = record
p: Pers;
tata, fiu, frate: Arbore
end;
var g: arrayPers, Pers! of 0..";
n, i: Pers; conex: boo#ean;
v: arrayPers! of 0..";
A: Arbore;
fout: text;
procedure citire;
var f: text; i, $: Pers;
begin
assign%f, &barfa.in&'; reset%f';
read#n%f, n';
for i := " to n do
for $ := " to n do
gi,$! := ";
()i#e not eof%f' do
begin
read#n%f, i, $';
gi,$! := 0; g$,i! := 0
end;
c#ose%f';
end;
procedure *+,%x: Arbore';
-vi.ita/ varfu# x; tx este tata# #ui x0
var i: Pers; 1, u: Arbore;
begin
u := ni#;-u#ti/u# fiu a# #ui x0
for i := " to n do
if %gx^.p, i! = "' and %vi! = 0' t)en
begin
vi! := ";
ne(%1'; 1^.p := i; 1^.tata := x;
1^.fiu := ni#; 1^.frate := ni#;
207
if u = ni# t)en -i este pri/u# fiu a# #ui x0
x^.fiu := 1
e#se
u^.frate := 1; -i este pri/u# frate a# #ui u0
u := 1;
*+,%1';
end;
end;
procedure postordine%x: Arbore';
-afisea.a instructiuni#e corespun.atoare parcurgerii postordine
a arbore#ui *+,0
var 1: Arbore;
begin
1 := x^.fiu;
()i#e 1 23 ni# do
begin
postordine%1';
1 := 1^.frate;
end;
if x23 A t)en (rite#n%fout,&%&,x^.p,&,&,x^.tata^.p,&'&';
end;
procedure preordine%x: Arbore';
var 1: Arbore;
begin
if x 23 A t)en (rite#n%fout,&%&,x^.tata^.p,&,&,x^.p,&'&';
1 := x^.fiu;
()i#e 1 23 ni# do
begin
preordine%1';
1 := 1^.frate;
end;
end;
begin -progra/ principa#0
citire;
assign%fout,&barfa.out&'; re(rite%fout';
v"! := "; A^.p := ";
*+,%A';
conex := true;
for i := " to n do
if vi! = 0 t)en
begin
conex := fa#se;
brea4
end;
if not conex t)en -grafu# este neconex0
(rite#n%fout,&Nu exista so#utii5&'
e#se
begin
postordine%A';
preordine%A';
end;
c#ose%fout';
208
end.
5. G. K4erci ii
9.-emons t r a i prin induci e dup numr ul de
vrfuri din graf c algorit mul lui !rim produce un arbor e
pari al de cost mini m.
:. "ie # $ %&, U' un graf neori ent at conex. 5ucia
.x, /0 se nume t e punt e dac prin eliminar ea ei din graf,
graful pari al obinut nu est e conex. Scriei un algorit m
care det er mi n toat e punil e unui graf conex. Algorit mul
s funcioneze n timp de ;%n8m' %n $x, m $U'.
Observai e
; muci e est e punt e dac i numai dac nu
apar i ne unui ciclu.
E. "ie # $ %&, U' un graf neorientat conex cu funci a
ponder e asoci at c6 U ?8\L U &.
a'. "ie W un arbor e pari al de cost mini m pent r u #.
-emons t r a i c exist o muci e .u, v0 W i .x, /0 W astfel
nct W,1.u,v02 1.x,/02 este al doilea cel mai bun arbor e pari al de
cost mini m %S#,3'.
b'. "ie W un arbor e pari al pent r u #. !ent ru
oricar e dou vrfuri u, v & defini m max%u, x' ca fiind o
muci e de ponder e maxi m de pe lan ul unic ntre u i v
n W.
-escri ei un algorit m cu timpul de execui e de
;%&
2
' astfel nct , dat W, s calcul eze max%u, v', u, v
&.
G. "ie # $ %&, U' un graf neorientat conex. (umi m dist an a
dintr e vrfurile x i /, not at d%x, /', numr ul de mucii
al celui mai scurt lan care unet e x cu /.
(otm6 e%x' $ excent ricit at e a vrfului x6
e x d x y
y X
( ) max ( , ) =

d%#' $ diamet r ul graful ui #


d G e x
x X
( ) max ( ) =

r%#' $ raza graful ui #


r G e x
x X
( ) min ( ) =

c%#' $ cent r ul graful ui #


209
c G x Xe x r G ( ) ( ) ( ) = =
q
n

a'. -emons t r a i c c%#' est e format dintr, un vrf
sau din dou vrfuri adi acent e.
b'. Art ai c d%#' :\r%#'.
c'. -escri ei un algorit m care s calcul eze raza,
diamet r ul i cent rul unui graf conex dat.
A' #rbori pariali DS
; alt tenic de parcur ger e n adnci me a
nodurilor unui graf est e met oda -ept , Searc. Aceast
met od mbin cele dou met ode de parcur ger e
prezent at e, n sensul c urmeaz acel ai algorit m ca
met oda Vreadt , "irst, Searc numai c utilizeaz o stiv,
ca i met oda -ept , "irst, Searc.
-e exempl u, pent r u graful din figura 9E,
parcur ger e a dup met oda -S, cu nodul iniial s $ I,
det er mi n urmt oar e a ordine de vizitar e a nodurilor6 I,
G, H, R, S, 9P, 99, 9:, J, E, :, 9. 5arcnd muciile
utilizat e prin vizitar ea nodurilor obinem un arbor e
pari al numi t arbor e pari al -S, cu rdci na s $ I %figura
:9'6 .I,G0, .I,H0, .I,R0, .I,S0, .S,9P0, .S,990, .99, 9:0,
.9P, J, .J,E0, .E,:0, .:,90.
"ig. :9.
Scriei un progr am care realizeaz parcur ger e a n
adnci me dupa met oda -S a unui graf, cu obiner ea
arbor el ui pari al -S.
I. !robl ema sponsor ul ui %;limpi ada (a Bional A de
Cnformat i c A , Suceava 9SSI'
?AWU) Suceava, unul dintre sponsorii olimpi adei,
i propune s mbunt e a s c transpor t ul n comun n
localit at e. -irect orul va pune la dispozii e o scem pe
care sunt repr ezent at e st aiile, numer ot at e pent r u
simplificar e, de la 9 la n i cele < linii direct e ntre st aii,
210
astfel nct ntre oricar e dou st aii exist legt ur ,
event ual cu sci mbar e a mi>locului de trans por t . Wrebui e
s det er mi na i dac exist cel puin o linie direct prin
blocar ea crei a legt ur a, direct sau indirect , ntre cel
puin dou st aii s fie ntrerupt . -ac astfel de linii
exist , s se propun nfiin ar ea unui numr ct mai mic
de linii direct e ntre st aiile exist ent e astfel nct prin
blocar ea unei singur e linii direct e, oricar e ar fi aceas t a,
circulai a ntre oricar e dou st aii s fie posibilL se alege
solui a pent r u care suma ocolurilor pe tras eel e vari ant a
%ms ur at e n numr de linii direct e' s fie ct mai mic.
211
Ane4 J
program Generare_Arbori_Partiali;
const NMax6f = 70;
NMaxMuc)ii = NMax6f8%NMax6f9"' div 7;
type 6f = "..NMax6f;
NrMuc)ie = "..NMaxMuc)ii;
:raf = array"..7, NrMuc)ie! of NrMuc)ie;
Arbore = array0..NMax6f9"! of NrMuc)ie;
var n: 6f; /: NrMuc)ie;
g::raf; a: Arbore;
c: array6f! of 6f; nr: (ord; fout: text;
procedure ;nitia#i.are;
var i: NrMuc)ie; $: 6f; fin: text;
begin
assign%fin, &ap.in&'; assign%fout, &ap.out&';
re(rite%fout'; reset%fin';
read#n%fin, n, /';
for i := " to / do read#n%fin, g",i!, g7,i!';
for $ := " to n do c$! := $;
c#ose%fin'
end;
procedure ,crieArb;
var i: 6f;
begin
inc%nr';
(rite#n%fout, &Arbore#e &,nr';
for i := " to n9" do
(rite%fout,&&, g",ai!!,&,&,g7,ai!!,&! &';
(rite#n%fout'
end;
procedure <onstrArb%i: 6f';
var $: NrMuc)ie; 4, Nou, 6ec)i: 6f; aux: set of 6f;
begin
if i = n t)en
,crieArb
e#se
for $ := ai9"!=" to / do
if cg", $!! 23 cg7, $!! t)en
-/uc)ia $ nu for/ea.a cic#uri cu ce#e de$a se#ectate0
begin
ai! := $;
-unific co/ponente#e conexe a#e extre/itati#or
/uc)iei $0
aux := !;-retin varfuri#e ce au fost trecute din
co/ponenta conexa 6ec)i in Nou0
Nou := cg", $!!; 6ec)i := cg7, $!!;
for 4 := " to n do
if c4! = 6ec)i t)en
begin
212
c4! := Nou;
aux := aux=4!;
end;
<onstrArb%i="';
-restaure. situatia dinaintea ape#u#ui 0
for 4 := " to n do
if 4 in aux t)en c4! := 6ec)i;
end
end;
begin -progra/ principa# 0
;nitia#i.are;
<onstrArb%"';
c#ose%fout';
end.
program Kruskal;
const NMax6f = 70;
NMaxMuc)ii = NMax6f8%NMax6f9"' div 7;
type 6f = "..NMax6f;
NrMuc)ie = "..NMaxMuc)ii;
Muc)ie = record
e", e7: 6f;
cost: (ord
end;
:raf = arrayNrMuc)ie! of Muc)ie;
Arbore = array"..NMax6f9"! of Muc)ie;
var n, i, /in, /ax, NrM,e#: 6f; 4:Muc)ie;
/: NrMuc)ie;
g::raf; a: Arbore;
c: array6f! of 6f;
procedure ;nitia#i.are;
var i: NrMuc)ie; $: 6f; fis: text;
begin
assign%fis, &>rus4a#.in&'; reset%fis';
read#n%fis, n, /';
for i := " to / do read#n%fis, gi!.e", gi!.e7, gi!.cost';
for $ := " to n do c$! := $;
c#ose%fis'
end;
procedure <o/b?eap%i, /: NrMuc)ie';
var parinte, fiu: NrMuc)ie; v: Muc)ie;
begin
v := gi!;
parinte := i;
fiu := 78i;
()i#e fiu 2= / do
begin
if fiu 2 / t)en
if gfiu!.cost 3 gfiu="!.cost t)en fiu := fiu=";
if v.cost 3 gfiu!.cost t)en
213
begin
gparinte! := gfiu!;
parinte := fiu;
fiu := fiu87;
end
e#se
fiu := /=";
end;
gparinte! := v;
end;
procedure <onstr?eap;
var i: NrMuc)ie;
begin
for i := / div 7 do(nto " do <o/b?eap%i, /';
end;
function /axi/%a, b: (ord': (ord;
begin
/axi/ := a;
if b 3 a t)en /axi/ := b
end;
function /ini/%a, b: (ord': (ord;
begin
/ini/ := a;
if b 2 a t)en /ini/ := b;
end;
procedure Afisare;
var i: 6f; <ostAPM: (ord;
begin
if NrM,e#= n9" t)en
begin
<ostAPM := 0;
(rite#n%&Arbore#e partia# de cost /ini/ este :&';
for i := " to n9" do
begin
(rite#n%&&,ai!.e",&,&,ai!.e7,&! cost=&,ai!.cost';
<ostAPM := <ostAPM=ai!.cost
end;
(rite#n%&<ostu# APM=&,<ostAPM';
end
e#se
(rite#n%&:rafu# nefiind conex nu ad/ite arbori partia#i. &';
read#n
end;
begin -progra/ principa# 0
;nitia#i.are;
<onstr?eap;
()i#e %NrM,e# 2 n' and %/ 3 0' do
begin
-extrag din )eap /uc)ia de cost /ini/0
214
4 := g"!;
g"! := g/!;
dec%/';
<o/b?eap%", /';
if c4.e"! 23 c4.e7! t)en -nu se for/ea.a cic#u0
begin
inc%NrM,e#';
aNrM,e#! := 4;
-contopesc conponente#e conexe a#e extre/itati#or
/uc)iei se#ectate 0
/in := /ini/%c4.e"!, c4.e7!';
/ax := /axi/%c4.e"!, c4.e7!';
for i := " to n do
if ci! = /ax t)en ci! := /in
end
end;
Afisare
end.
program Prim;
const NMax6f = 70;
NMaxMuc)ii = NMax6f8%NMax6f9"' div 7;
;nf = Max@ong;nt;
type 6f = "..NMax6f;
:raf = array6f,6f! of rea#;
var n, r, i, 6fMin: 6f;
:: :raf;
p: array6f! of 0..NMax6f;
A: set of 6f;
4ey: array6f! of rea#;
>eyMin: rea#;
procedure ;nitia#i.are;
var i, $, 4, nrv: 6f; c: rea#;
fin: text;
begin
assign%fin, &pri/.in&'; reset%fin';
read#n%fin, n, r';
for i := " to n do
for $ := " to n do
:i,$! := ;nf;
for i := " to n do
begin
:i,i! := 0;
read%fin, nrv'; -nrv9nu/aru# de varfuri adiacente cu i0
for $ := " to nrv do
begin
-citesc varfuri#e adiacente cu i si costuri#e
/uc)ii#or corespun.atoare0
read%fin, 4, c';
:i,4! := c;
end;
read#n%fin';
215
end;
for i := " to n do
begin
4eyi! := :r, i!;
pi! := r
end;
A := "..n!9r!; pr! := 0;
c#ose%fin';
end;
procedure AfisareAPM;
var i: 6f; cost: rea#;
begin
cost := 0;
(rite#n%&Muc)ii#e APM sunt: &';
for i := " to n do
if i 23 r t)en
begin
(rite%&&,pi!,&,&,i,&! &';
cost := cost=:i,pi!!;
end;
(rite#n;
(rite#n%&<ostu# APM &, cost:7:7';
read#n
end;
begin
;nitia#i.are;
()i#e A 23 ! do
begin
>eyMin := ;nf; -deter/in nodu# din A de c)eie /ini/a0
for i := " to n do
if %i in A' and %>eyMin 3 4eyi!' t)en
begin
>eyMin := 4eyi!;
6fMin := i
end;
A := A96fMin!;
for i := " to n do -actua#i.e. c)ei#e varfuri#or din A0
if %i in A' and %:i, 6fMin! 2 4eyi!' t)en
begin
pi! :=6fMin;
4eyi! := gi, 6fMin!
end
end;
AfisareAPM
end.
program Arbori_Partiali_BF_DF;
const NrMax6f = 70;
type 6f = 0..NrMax6f;
@ista = ^Nod@ista;
216
Nod@ista = record
inf: 6f;
ur/: @ista;
end;
:raf = array6f! of @ista;
Arbore = array6f! of 6f;
var n: 6f;-nu/aru# de varfuri din graf0
s: 6f;-varfu# sursa0
:: :raf;
AB, A*: Arbore;-arborii partia#i obtinuti prin parcurgere
B+, respectiv *+0
6: array6f! of boo#ean;
procedure ;nitia#i.are;
var fin: text; i, $: 6f; p: @ista;
begin
assign%fin, &graf.in&'; reset%fin';
read#n%fin ,n'; read#n%fin, s';
for i := " to n do
begin
:i! := ni#; 6i! := fa#se;
()i#e not see4eo#n%fin' do
begin
read%fin, $';
ne(%p'; p^.inf := $;
p^.ur/ := :i!; :i! := p;
end;
read#n%fin';
end;
6s! := true;
c#ose%fin';
end;
procedure *+,%x: 6f';
var 1: @ista;
begin
1 := :x!;
()i#e 1 23 ni# do -parcurg #ista de adiacenta a #ui x0
begin
if not 61^.inf! t)en -varfu# 1^.inf este nevi.itat0
begin
61^.inf! := true; A*1^.inf! := x;
*+,%1^.inf';
end;
1 := 1^.ur/;
end;
end;
procedure B+,;
type <oada = ^Nod<oada;
Nod<oada = record
inf: 6f;
ur/: <oada
end;
217
var <, ,f<: <oada;
1: @ista; x: 6f;
p: <oada;
begin -initia#i.e. coada0
ne(%<'; <^.inf := s; <^.ur/ := ni#; ,f< := <;
for x := " to n do 6x! := fa#se; 6s! := true;
()i#e < 23 ni# do
begin
x := <^.inf;-pri/u# varf din coada0
1 := :x!;
()i#e 1 23 ni# do -parcurg #ista de adiacenta a #ui x0
begin
if not 61^.inf! t)en -varfu# 1^.inf nevi.itat0
begin
61^.inf! := true; AB1^.inf! := x;
-insere. 1^.inf in coada0
ne(%p'; p^.inf := 1^.inf;
p^.ur/ := ni#; ,f<^.ur/ := p; ,f< := p;
end;
1 := 1^.ur/;
end;
p := <; < := <^.ur/;
dispose%p';-a/ extras din coada vafu# x0
end;
end;
procedure AfisareArbore%A: Arbore';
var i: 6f;
begin
for i := " to n do
if Ai! 23 0 t)en (rite%&&,i,&,&,Ai!,&! &';
(rite#n;
end;
begin -progra/ principa#0
;nitia#i.are;
*+,%s';
B+,;
(rite#n%&Arbore#e partia# *+, este:&';
AfisareArbore%A*';
(rite#n%&Arbore#e partia# B+, este:&';
AfisareArbore%AB';
read#n;
end.
program Componente_Biconexe;
const NMax6f = 70;
type 6f = 9"..NMax6f;
,tiva = ^Nod,tiva;
Nod,tiva = record
f, t: 6f;
ur/: ,tiva
218
end;
@ista = ^Nod@ista;
Nod@ista = record
v: 6f;
#eg: @ista;
end;
:raf = array0..NMax6f! of @ista;
var ,: ,tiva; :: :raf;
#o(, dfn: array0..NMax6f! of 6f;
nr, n, sursa:6f; nu/: 0..NMax6f;
procedure ;nitia#i.are;
var ns: 6f; i, $: 6f; p: @ista; fin: text;
begin
assign%fin, &biconex.in&'; reset%fin';
read#n%fin, n'; read#n%fin, sursa';
for i := 0 to n do
begin
:i! := ni#;
read#n%fin, ns';
for $ := " to ns do
begin
ne(%p';
read%fin, p^.v';
p^.#eg := :i!; :i! := p;
end;
read#n%fin';
dfni! := 9"
end;
c#ose%fin';
ne(%,'; ,^.f := sursa; ,^.t := 9"; ,^.ur/ := ni#;
end;
procedure AfisareC<o/pCBiconexa%x, u: 6f';
var p: ,tiva; a, b: 6f;
begin
inc%nr';-nr9nu/aru# de co/ponente biconexe0
(rite#n%&/uc)ii#e co/ponentei biconexe &,nr,& sunt:&';
repeat
p := ,; a := p^.t; b := p^.f; , := ,^.ur/;
(rite%&%&,a,&,&,b,&' &';
dispose%p';
unti# %a = u' and %b = x';
(rite#n
end;
function /in %a, b: 6f': 6f;
begin
if a 2 b t)en /in := a
e#se /in := b
end;
procedure Biconex%u, tu: 6f';
-ca#cu#ea.a dfn si #o( si afisea.a co/ponente#e biconexe0
219
var p: @ista; 1: ,tiva; x: 6f;
begin
dfnu! := nu/; #o(u! := dfnu!; inc%nu/';
p := :u!;
()i#e p 23 ni# do -parcurg #ista de adiacenta a #ui u0
begin
x := p^.v;
if %x 23 tu' and %dfnx! 2 dfnu!'t)en
begin-inserea.a in stiva , /uc)ia%u,x'0
ne(%1'; 1^.f := x; 1^.t := u;
1^.ur/ := ,; , := 1;
end;
if dfnx! 2 0 t)en -x nu a /ai fost vi.itat0
begin
Biconex %x, u';
#o(u! := /in%#o(u!, #o(x!';
if #o(x! 3= dfnu! t)en -u punct de articu#atie;
a/ identificat o co/ponenta biconexa, ce
contine /uc)ii#e din stiva , pana #a %u,x'0
AfisareC<o/pCBiconexA%x,u';
end
e#se
if x 23 tu t)en #o(u! := /in%#o(u!, dfnx!';
p:=p^.#eg
end;
end;
begin -progra/ principa#0
;nitia#i.are;
Biconex%sursa, 9"';
read#n
end.
220

S-ar putea să vă placă și