Sunteți pe pagina 1din 20

GRAFURI ORIENTATE

Notiuni de baza
Un graf orientat G este format dintr-o pereche ordonata de multimi
G=!"U#$ ca si in cazul %rafurilor neorientate" ! este multimea varfurilor
sau nodurilor %rafului$&ultimea U este formata din perechi ordonate de
elemente distincte din !" numite arce.Orice arc u U 'a fi notat prin
u=x,y# cu x,y! si xy.
(punem ca 'arful x este extremitatea initiala a arcului u, iar 'arful y
este extremitatea finala a arcului u. (pre deosebire de cazul %rafurilor
neorientate" notatiilex,y# si y,x) 'or desemna doua arce diferite$
)aca %raful G contine arcul x,y# 'om spune ca 'arfurile x si y sunt
adiacente in G si amandoua sunt incidente cu arcul x,y#$ )eci" un %raf
orientat G poate fi ima%inat ca o multime de 'arfuri" dintre care unele sunt
unite doua cate doua prin arce$ Un %raf orientat poate fi desenat in plan
reprezentand 'arfurile sale prin puncte si arcele prin sa%eti care sunt
orientate de la e*tremitatea initiala catre e*tremitatea finala a fiecarui arc$
Graful orientat G=!"U# unde+
!=, -"." /$ "01 si U=,-".#" ."2#" 2"-#" 2".#" ."3#" 3"4#" 2"4#" 5"0#"
0"6#" 6"0#"6"5#1 se reprezinta ca in fi%ura+
. u
4
3
u
-
- u
2
u
3
u
6
u
.
2 u
5
4
7om nota arcele asa cum se indica in fi%ura " adica u
1
=-".#"
u
2
=2"-#"/$" u
11
=5"0#$
-
Gradul exterior al unui 'arf x, notat prin d+x#" este numarul arcelor
de forma x,y# cu y!$ Gradul exterior al unui 'arf x, notat prin d-x#"este
numarul arcelor de forma y,x# cu y!$
Un graf partial al unui %raf orientat G=!"U# se defineste in acelasi
mod ca si in cazul neorientat$ El este un %raf G
-
=!"7# unde 7U" deci este
%raful G insusi sau se obtine din G prin suprimarea anumitor arce$
(i definitia unui sub%raf al unui %raf orientat G=!"U# este
asemanatoare cu cazul neorientat$8rin defini9ie " un sub%raf al lui G este un
%raf :=;"7#" unde ;!" iar arcele din 7 sunt toate arcele din U care au
ambele e*tremi9a9i in mul9imea de 'arfuri ;$
)eci un sub%raf : al unui %raf orientat G este %raful G insu<i sau se
ob9ine din G prin suprimarea anumitor 'arfuri si a tuturor arcelor incidente
cu acestea $
7om spune ca sub%raful : este indus sau generat de multimea de
'arfuri ;$
Astfel"sub%raful %rafului G din fi%ura "indus de multimea de 'arfuri
;
-
=,-"."3"41 are ca multime de arce multimea 7
-
=,-".#" ."3#" 3"4#1"iar
sub%raful indus de multimea de 'arfuri ;
.
=,5"6"01 are multimea arcelor
7
.
=,6"5#"5"0#"6"0#"0"6#1$
Un %raf orientat este complet daca oricare doua 'arfuri sunt adiacente$
In timp ce in cazul neorientat un %raf complet cu n 'arfuri este unic
determinat" in cazul orientat e*ista mai multe %rafuri complete cu un numar
dat de 'arfuri$Ele se deosebesc fie prin orientarea arcelor " fie prin faptul ca
intre doua 'arfuri oarecare e*ista un arc sau doua arce de sensuri contrare$
Un lant al unui %raf orientat se defineste ca un sir de arce+
L=[u
1
,u
2
,..,u
p
!
=u proprietatea ca oricare arc u
"
din acest sir are comuna o e*tremitate cu
u
i-1
" iar cealalta e*tremitate este comuna cu u
i+1
pentru orice i=-"$$$"p--$
)aca toate arcele lantului L au aceeasi orientare "care este data de
sensul deplasarii de la x
#
catre

x
r
lantul se numeste drum.
)eci un drum intr-un %raf orientat G=!"U# este un sir de 'arfuri
notat +
$=%x
#,
x
1
,...,x
r
)
cu proprietatea ca x
#
,x
1
), %x
1,
x
2
), .... , %x
r-1,
x
r
)U" deci sunt arce ale %rafului$
7arfurile x
#
si x
r
se numesc e*tremitatile drumului )$ )aca 'arfurile
x
#
,x
1
, ... , x
r
sunt distincte doua cate doua" drumul ) se numeste elementar.
)in aceste definitii rezulta ca orice drum este si lant " daca il pri'im ca un sir
de arce$
.
Un drum )=%x
#
, ... ,x
r
) poate fi interpretat ca fiind traseul unei
daplasari pe arcele %rafului in ordinea %x
#
,x
1
), %x
1
,x
2
), ... , %x
r-1
,x
r
).
)e aceea drumul ) de e*tremitati x
#
si x
r
" se mai spune ca este un
drum de la x
#
la x
r
$)aca x
#
=x
r
si toate arcele %x
#
,x
1
), %x
1
,x
2
), ... ,%x
r-1
,x
r
) sunt
distincte doua cate doua" drumul ) se numeste circuit$
)aca toate 'arfurile circuitului" cu e*ceptia primului si a ultimului
'arf" sunt distincte doua cate doua" circuitul se numeste elementar$
Notiunile de conexitate si de componenta conexa a unui %raf orientat
sunt similare cu cele de la %rafurile neorientate " utilizand notiunea de lant
din cazul %rafurilor orientate$
Astfel" un %raf orientat G se numeste conex daca pentru oricare doua
'arfuri distincte x si y e*ista un lant de e*tremitati x si y in G$ O
componenta conexa = a unui %raf orientat G se defineste ca fiind un sub%raf
cone* ma*imal al lui G " deci nu e*ista nici un lant care sa uneasca un 'arf
din = cu un 'arf care nu apartine lui =$
2
)RU&URI &INI&E (I &A!I&E IN GRAFURI ORIENTATE
O alta notiune de cone*itate care apare numai in cazul %rafurilor
orientate este aceea de cone*itate tare+ Un %raf orientat G se numeste tare
conex daca pentru oricare doua 'arfuri distincte x si y ale lui G e*ista un
drum x, ... ,y# de la x la y $)eoarece putem schimba rolul lui x si y uneori
definitia unui %raf tare cone* se bazeaza pe e*istenta unui drum de la x la y
si a unui drum de la y la x pentru oricare doua 'arfuri distincte x si y ale
%rafului$
8entru %rafurile orientate cone*itatea tare implica cone*itatea simpla "
adica orice %raf tare cone* este si cone*$
O componenta tare cone*a a unui %raf orientat G se defineste ca fiind
un sub%raf tare cone* ma*imal = al lui G " deci nu e*ista drumuri care sa
uneasca in ambele sensuri un 'arf x din = cu un 'arf y al lui G care nu
apartine lui =" pentru orice x si y cu proprietatile mentionate$ Rezulta ca
orice %raf tare cone* are o sin%ura componenta tare cone*a care contine
toate 'arfurile %rafului$
(a consideram o functie l definita pe multimea U a arcelor unui %raf
orientat G=!"U# cu 'alori numere reale poziti'e+
l +U{x| xR" x > #&.
Aceasta functie asociaza oricarui arc u al %rafului lun%imea sa notata
l%u)$ )aca =%x, ... ,y) este un drum de la x la y in %raful G" 'om defini
lun%imea drumului in mod aditi'" prin e%alitatea+
l%)=
u
l%u),
adica lun%imea unui drum este e%ala cu suma lun%imilor arcelor sale$
3
Un drum de la x la y se 'a numi drum minim % respecti'
maxim#lun%imeadrumului este minimul respecti' ma*imul#
lun%imilor drumurilor de la x la y " presupunand ca multimea acestor
drumuri este ne'ida$ Totusi intre aceste doua notiuni de drum minim si
de drum ma*im e*ista o deosebire importanta $
Orice drum minim este elementar " deoarece in caz contrar daca un
'arf se repeta in sirul care defineste drumul " subdrumul cuprins intre doua
aparitii consecuti'e ale unui 'arf poate fi eliminat si obtinem un drum de
lun%ime strict mai mica decat drumul presupus minim " ceea ce este absurd$
)eoarece multimea drumurilor elementare de la x la y este finita
pentru oricare doua 'arfuri distincte x si y " rezulta ca un drum minim de la
x la y 'a e*ista intotdeauna pentru oricare doua 'arfuri distincte x si y ale
unui %raf tare cone* $
8entru tratarea problemelor de minim 'om asocia %raful G o matrice a
costurilor ==c
i>
#
nn
definita astfel +

l%x
i
,x
'
) daca %x
i
, x
'
)(

)
i'
= # daca i='

? daca %x
i
,x
'
)(
Intuiti'"aceasta ale%ere ar insemna ca drumul cel mai scurt de la x
i
la
el insusi este de lun%ime @ iar ine*istenta arcului % x
i
, x
'
)este totuna cu
e*istenta unui arc de lun%ime infinita care e'ident nu 'a inter'eni
niciodata intr-un e'entual drum minim de la x
i
la x
'
# $
Al%oritmul lui )i>Astra
8roblema+ *iind dat un graf orientat G=%+,() , o functie l,(-
+
si
un nod x
i#
, sa se determine pentru toate varfurile x
i
pentru care exista drum
de la x
i#
la x
i
, lungimea celui mai scurt drum precum si unul dintre
drumurile minime de la x
i#
la x
i
.
Al%oritmul utilizeaza metoda GreedB %enerand drumurile minime in
ordinea crescatoare a lun%imilor$
.xemplu,
4
8entru %raful urmator " considerand nodul de plecare - se 'or obtine
in ordine+
)
-
=-".# de lun%ime -C
)
.
=-"."4# de lun%ime .C
)
2
=-"."4"2# de lun%ime 3C
)
3
=-"."4"2"3# de lun%ime 4C
)eci pornind din nodul - a'em in final +
de la - la . )
-
de lun%ime -C
de la - la 2 )
2
de lun%ime 3C
de la - la 3 )
3
de lun%ime 4C
de la - la 4 )
.
de lun%ime .C
de la - la 5 nu e*ista drum$
. 6
- 2
- .
- 4 3
2
- 2

5
(e porneste de la 'arful x
i#
$ E'ident cel mai scurt drum de la x
i#
la
unul dintre celelalte 'arfuri ale %rafului este dat de arcul %x
i#
, x
'
) de lun%ime
minima $ Urmatorul drum in ordinea lun%imilor 'a fi dat fie de un alt arc cu
e*tremitatea initiala x
i#
fie de un drum %x
i#
,x
'
,x
p
). Ale%em in continuare
drumuri in ordinea crescatoare a lun%imilor " pana cand am determinat
drumuri minime de la x
i#
catre toate 'arfurile pentru care e*ista drum
pornind din x
i#
$8entru aceasta se considera ( multimea 'arfurilor x
'
+
pentru care am %asit drum minim de la x
i#
la x
'
$ Initial (=, x
i#
1$ Da fiecare
pas " adau%am in ( acel nod x
/
+ E0 cu proprietatea ca drumul minim de la
x
i#
la x
/
are cel mai mic cost dintre toate drumurile de la x
i#
la x
p
" cu x
p
!E($
8entru e*emplul considerat ( 'a a'ea pe rand urmatorul continut+
(=,-1
(=,-".1
(=,-"."41
(=,-"."4"21
(=,-"."4"2"31
5
(a obser'am ca drumul minim de la x
i#
la x
/
%x
/
nodul ce urmeaza sa-l
adau%am in ( la un moment dat# trece numai prin 'arfuri din ( cu e*ceptia
lui x
/
#C intr-ade'ar notand x
i
primul 'arf de pe acest drum ce nu apartine lui (
si presupunand ca x
i
x
/
ar rezulta ca drumul de la x
i#
la x
i
este mai scurt decat
cel de la x
i#
la x
/
ceea ce ar contrazice ale%erea lui x
/
.
8entru a ale%e nodul x
/
+10 ce urmeaza a fi adau%at in ( 'om folosi
un 'ector d=% d
1
, d
2
, ... , d
n
) astfel incat
lun%imea drumului minim de la x
i#
la x
i
" daca x
i
(
d
i
= lun%imea drumului minim de la x
i#
la x
i
ce foloseste numai

'arfuri din ( daca x
i
(
Initial d
i
==i
#
,i) i=-"n unde = este matricea costurilor $
Da un moment dat " adau%am in ( nodul x
/
cu proprietatea ca

d
/
=min,d
'
/ x
'
+/ 0 &.
)upa adau%area lui x
/
in ( trebuie actualizate 'alorile lui d pentru
elementele care nu sunt in ( " deoarece este posibil ca drumul minim de la
x
i#
la unul din aceste noduri folosind noduri din ( # sa foloseasca nodul x
/
pe care tocmai l-am adau%at $ Fie x
'
+20 un astfel de nod $ )rumul minim
de la x
i#
la x
'
ce foloseste noduri din ( inclusi' x
/
# 'a fi de forma )=x
i#
, ...
.... , x
/
, x
'
#$ Intr-ade'ar" presupunind ca e*ista noduri intermediare x
p
pe
drumul de la x
/
la x
i
adica )= x
i#
, ... ,x
/
, ... ,x
p
, ... ,x
'
# ar e*ista drumul mai
scurt format din drumul minim de la x
i#
la x
p
care e'ident nu contine x
/
deoarece x
p
a fost adau%at mai inainte la multimea ( # si sec'enta din ) de la
x
p
la x
'
$ )eci pentru x
'
!/( " d
'
se modifica dupa adau%area lui x
/
la ( numai
daca
d
/
?=A">#F " caz in care d
'
, ?=A">#$
In final " 'ectorul 'a contine costurile lun%imile # drumurilor minime
de la x
i#
la celelalte noduri C daca pentru un nod x
'
nu e*ista drum de la x
i#
la
x
'
, d
'
= .
&ai >os este prezentat al%oritmul in limba> 8ascal$ 8entru
reprezentarea multimii ( s-a folosit 'ectorul caracteristic ( cu n componente

@ daca x
i
0
(GiH=
- daca x
i
0
6
=a multime de noduri se considera !=,-"." $$$ "n1 iar lun%imile
arcelor se considera numere intre%i$
program )i>AstraC
const nma*=-4C
inf=ma*int di' .C
var c+arraBG-$$nma* " -$$nma*H of inte%erC
A"i">"arc"m"n"*"B"z"*p+ intr%erC
s"d"prec+arraBG-$$nma*H of inte%er
%+ booleanC
procedure min'ar A+ inte%er#C
var m"i+ inte%erC
begin
m+=infI.C
for i+=- to n do
if sGiH=@# and dGiHFm# then
begin m+=dGiHC
A+=iC
end
end;
procedure drumi+inte%er#C
begin
if iFJ@ then
begin
drumprecGiH#C
Kritei#C
end
else Kriteln
end;
begin
Kriteln dati nr de noduri #C readln n#C
for i+=- to n do
for>+=- to n do cGi">H+=infC
for i+=- to n do cGi">H+=@C
0
Kriteln dati nr de arce #C read arc#C
for i+=- to arc do
begin
Krite dati arcul "i" si lun%imea #C
readln *"B"z#C
cG*"BH+=zC
end;
read*p#C
for i+=- to n do begin
dGiH+=cG*p"iHC
sGiH+=@C
if cG*p"iHF inf then precGiH+=*p
else precGiH+=@C
endC
sG*pH+=-C
precG*pH+=@C
%+=trueC
*+=@C
repeat
min(k)C
*+=*?-C
if dGAH=inf# or (x=n) then g:=false
else begin
s[k]:=1;
for j:=1 to n do
if (s[j]=)and (d[j]!d[k]"c[k#j]) then
begin
d[j]:=d[k]"c[k#j];
prec[j]:=k;
end;
end;
until (not g);
for i:= 1 to n do
if i$!xp then
if d[i]=inf then
begin
%rite(&'u exista drum de la (#xp# &la(#i);
%riteln;
L
end
else begin
%riteln(&)rum minim de la (#xp#(la(#i);
drum(i);
%riteln
end
end*
Al%oritmul lui RoB- FloBd
+roblema: Fiind dat un %raf G=!"U# cu !=,x
1
, ... , x
n
1 si o functie
l,UR
?
sa se determine pentru fiecare pereche de noduri x
i
, x
'
i>#
lun%imea minima a drumurilor de la x
i
la x
'
precum si aceste drumuri in caz
ca e*ista drum de la x
i
la x
'
#
Al%oritmul RoB MFloBd determina lun%imile minime ale drumurilor
intre oricare doua noduri ale %rafului intr-o matrice ==c
i'
#
nn
unde
=
IN
= daca i='
lun%imea drumului minim de la x
i
la x
'
daca e*ista
drum de la x
i
la x
'
daca nu e*ista drum de la x
i
la x
'
)eterminarea matricii = este asemanatoare al%oritmului RoB-Oarshall
pentru obtinerea matricii drumurilor
(e porneste de la matricea costurilor =
for A=- to n
for i=- to n iA#
for '=- to n >A#
c
i'
+ = min c
i'
, c
i/
+ c
/'
#
endfor
endfor
endfor
34servatie , Acest al%oritm poate fi pri'it ca o succesiune de n
transformari aplicate matricii = " o transformare / fiind astfel +
T
/
A# = P" P =b
i>
#
nn
" b
i>
= mina
i'
,a
i/
+a# i,' 5 1 , ... , n&$
-@
(imultan cu determinarea lun%imilor minime ale drumurilor " pot fi
retinute si acestea $ 7om folosi o matrice )=d
i'
#
nn
ale carei elemente d
i'
sunt
multimi de noduri d
i'
'a reprezenta in final multimea nodurilor ce pot
precede pe *
>
in drumul minim de la x
i
la x
'
#$
Odata cu initializarea matricii = cu matricea costurilor 'om initializa
si matricea ) astfel +
5x
i
& daca c
i'
< si i '
d
i'
=
daca c
i'
= sau i='
8e masura ce se actualizeaza matricea = 'om actualiza si matricea )
dupa cum urmeaza +
- daca c
i'
6c
i/
+c
/'
" atunci d
i'
ramane neschimbat C
- daca c
i'
=c
i/
+c
/'
inseamna ca am %asit noi posibilitati de
construire a drumului minim de la x
i
la x
'
folosind nodul / #
se adau%a la d
i'
'arfurile din d
/'
C
- daca c
i'
7c
i/
+c
/'
se initializeaza d
i'
cu d
/'
$
In final reconstituirea drumurilor minime intre oricare doua 'arfuri
x
i
,x
'
se face pornind din x
'
astfel + precedentul lui x
'
il ale%em din multimea
d
i'
a'and unul din aceste noduri fi*at sa-l numim x
g
# precedentul acestuia 'a
fi orice nod din multimea d
ig
$ 8rocedeul continua pana a>un%em la nodul x
i
$
34servatie , )aca ne intereseaza doar cate un drum pentru fiecare
pereche de noduri x
i
, x
'
'om considera in locul matricii ) o matrice ) tot
nn astfel incat d
i'
sa retina un nod ce-l poate precede pe x
'
in drumul minim
de la x
i
la x
'
$
&ai >os este scris pro%ramul 8ascal de determinare a tuturor drumuri-
lor minime intre oricare doua 'arfuri ale unui %raf G=!"U# cu !=,- " $$$ " n1
program roBminC
const nma*=.@C
inf=ma*int di' .C
,inf poate fi initializat cu o 'aloare ce depaseste suma tuturor
costurilor1
t,pe multime = set of -$$ nma*C
var c= arraBG-$$nma* " -$$nma*H of KordC
,c initial matricea drumurilor1
d+ arraB G-$$nma* " -$$nma*H of multimeC
dr+ arraB G-$$nma*H of -$$nma*C
n"m"i">$A$l%+KordC
--
procedure initcC
,initializeaza matricea costurilor =1
var i">"*"B"z+ KordC
begin
KriteQ )ati nr de noduri+ Q#C
readlnn#C
for i+=- to n do
begin
for >+=- to n do
cGi">H += infC
cGi"iH +=@C end;
KriteQ)ati nr de noduri + Q#C
readlnm#C
for i+=- to m do
begin
KriteQE*tremitatile si lun%imea arcului Q"i"Q+ Q#C
readln*"B"z#C
cG*"BH+=zC
end;
end;
procedure initdC
,ini9ializeaza matricea )1
'ar i">+inte%erC
begin
for i+=- to n do
for >+=- to n do
ifcGi">HFinf#andiFJ># then dGi">H=GiH
else dGi">H=GHC
end;
procedure drumi">+inte%er#C
,%enereaza in 'ectorul dr un drum minim de la i la > pornind din nodul >1
var A+ Kord C
begin
if iFJ> then
begin
for A+=- to n do
if A in dGi">H then
begin
l%+=l%?-C
drGl%H+=AC
-.
drumi"A#C
l%+=l% M -
end;
end
else begin
KritelnC
for A+=l% do%nto - do
KritedrGAH+3#
endC
endC
procedure afi<areC
'ar i">+KordC
,afi<area rezultatelor1
be%in
for i+= - to n do
for >+=- to n do
begin
%riteln:
if c[i#j]=inf then
%riteln(& nu exista drumuri minime de la &#i#( la &#j#()
else
begin
%riteln(& lungimea drumurilor minime de la &#i#( la(#j#( este
&#c[i#j]);
if i$! i then begin
lg:=1;
dr[1]:=j
drum(i#j)
end
end
end
end;
begin
initc;
initd;
for k:=1 to n do
for i:=1 to n do
for >+=- to n do
if cGi">HJcGi"AH?cGA">H then
-2
be%in
cGi">H+=cGi"AH?cGA">H+
dGi">H+=dGA">H
end
else
if cGi">H=cGi"AH?cGA">H then
dGi">H+=dGi">H?dGA">HC
afi<areC
end$

)RU&URI &A!I&E IN GRAFURI ORIENTATE
Fie G=!"U# un %raf fara circuite cu !=,x
1
, x
2
,... , x
n
1 si l+UR
?
$
Ne punem problema determinarii drumurilor de lun%ime ma*ima in acest
%raf$ 7om atasa %rafului G o matrice &=m
i>
#
nn
definita astfel +

l%x
i
, x
'
) daca %x
i
, x
'
)(
m
i'
= - daca %x
i
, x
'
)( si %i')
@ daca i='
Obser'am ca aceasta matrice este asemanatoare matricii costurilor
atasata %rafului pentru determinarea drumurilor minime " cu diferenta ca
pentru perechi de noduri x
i
, x
'
%i') pentru care nu e*ista arcul %x
i
,x
'
) marcam
in matrice - $ Intuiti' " aceasta ar insemna ca ine*istenta arcului %x
i
, x
'
) este
totuna pentru studiul drumurilor ma*ime" cu e*istenta unui arc de lun%ime
- care e'ident nu 'a inter'eni niciodata intr-un e'entual drum ma*im de la
x
i
la x
'
# $
Al%oritmii de determinare a drumurilor minime pot fi adaptati cu mici
modificari pentru determinarea drumurilor ma*ime$ =onsiderind problema
determinarii drumurilor ma*ime intre oricare doua 'arfuri x
i
, x
'
%i') pentru
care e*ista drum de la x
i
la x
'
" putem utiliza urmatorul al%oritm+
Fie & matricea asociata %rafului ca mai sus " iar )=%d
i'
)
nn
cu
-3
,*
i
1 daca m
i'
7- si %i')

d
i'
=
daca m
i'
= - sau i='
for A=- to n
for i=- to n Ai#
for >=- to n A>#
if m
i>
Fm
iA
?m
A>
then m
i>
+= m
iA
?m
A>

d
i>
+= d
A>

else
if m
i>
+= m
iA
? m
A>
then d
i>
+= d
i>
d
A>
endif
endif
endfor
endfor
endfor$
In matricea & 'om a'ea in final lun%imile drumurilor ma*ime intre
oricare . noduri iar in d
i'
i ,'51 , ... , n& 'om a'ea multimea nodurilor ce
pot precede pe x
'
intr-un drum ma*im de la x
i
la x
'
$
&ai >os este dat pro%ramul 8ascal de determinare a tuturor drumurilor
ma*ime intre oricare doua noduri folosind al%oritmul prezentat anterior "
pentru un %raf G=!" U# " !=,- " $$$ " n1 $
pro%ram roBma*C
const nma*=.@C
inf=-ma*int di' .#C
tBpe multime = set of - $$ nma*C
'ar c+ arraB G- $$ nma* " - $$ nma*H of inte%erC
,c initial matricea costurilor1
d+ arraB G- $$ nma* " - $$ nma*H of multimeC
dr+ arraBG- $$ nma*H of - $$ nma*C
n"m"i">"A"l%+KordC
procedure initcC
,initializeaza matricea costurilor =1
-4
'ar i">"*"B"z+KordC
be%in
Krite)ati nr de noduri+#C
readlnn#C
for i+=- to n do
be%in
for >+=- to n do
cGi">H+= infC
cGi">H+=@
endC
Krite)ati nr de ace +#C
readlnm#C
for i+=- to m do
be%in
KriteE*tremitatile si lun%imea arcului"i" +#C
readln*"B"z#C
cG*"BH +=zC
end
endC
procedure initd C ,initializeaza matricea )1
'ar i"> + inte%er C
be%in
for i+=- to n do
for >+=- to n do
if cGi">HJ inf# and iFJ># then dGi">H+=GiH
else dGi">H+=GHC
endC
prodcedure drumi">+inte%er#C
'ar A+KordC
be%in
if iFJ> then
be%in
for A+=- to n do
if A in dGi">H then
be%in
l%+= l%?-C
drGl%H+=AC
drumi"A#"
l%+=l%--
-5
endC
end
else be%in
KritelnC
for A+=l% doKnto - do
KritedrGAH+3#
endC
endC
procedure afisareC
'ar i">+KordC
be%in
for i+=- to n do
for >+=- to n do
be%in
KritelnC
if cGi">H=inf then
Kriteln nu e*ista drum intre "i" si ">#
else
be%in
KritelnDun%imea drumurilor ma*ime de laR"i"RlaR">"R este
S"cGi">H#C
if iFJ> then be%in
l%+=-C
drG-H+=>C
drumi">#
end
end
end
endC
be%in
initcC
initdC
for A+=- to n do
for i+=- to n do
for >+=- to n do
if cGi"AHFJinf# and cGA">HFJinf# then
if cGi">HFcGi"AH?cGA">H # then
be%in
cGi">H+=cGi"AH?cGA">HC
-6
dGi">H+=dGA">HC
end
else
if cGi">H=cGi"AH?cGA">H then dGi">H+=dGi">H?dGA">HC
afisareC
end$
-0
-L
.@

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