Sunteți pe pagina 1din 14

UNIVERSITATEA PETRU MAIOR FACLTATEA DE STIINTE SI LITERE

Algoritmica grafurilor
Algoritmi utilizati in grafuri: algoritmul Warshall, algoritmul Dantzig, algoritmul Bellman-Kalaba

Student: Marcu Ruxa !ra Specializare: I formatica Anul" II Profesor: Crai icu #og!a

$%&'

Algoritmi utilizati in grafuri: algoritmul Warshall, algoritmul Dantzig, algoritmul Bellman-Kalaba


Algoritmul Flo d-Warshall

Ac()t algoritm !(t(rmi a !rumuril( !( *aloar( mi ima !i tr( toat( +(r(c,il( !( *arfuri al( u ui graf ori( tat G - .X; U/ *alori0at1 Fu cttia v " U -> R +oat( lua )i *alori (gati*( !ar *om +r()u+u ( ca u (xi)ta cicluri !( co)t (gati*1
!nunt" Fiind dat un graf orientat G=(X,U) cu X={x1,x2,.,xn} i o funcie de cost l:U->R+ s se determine pentru fiecare pereche de noduri xi,xj (i j) lungimea minim a drumurilor de la xi la xj precum i aceste drumuri (n ca c e!ist drumuri de la xi la xj"# Algoritmul Flo d-Warhall !(t(rmi 2 lu gimil( mi im( al( !rumurilor 3 tr( oricar( !ou2 o!uri al( grafului 3 tr4o matric( "#$ci%&n'n u !( " lungimea drumului minim de la 'i la '% dac( e'ist( drum de la 'i la '% ci%# ) dac( i#% * dac( nu e'ist( drum de la 'i la '% D(t(rmi ar(a matricii " ()t( a)(m2 2toar( algoritmului +o -Warshall +( tru o56i (r(a matricii !rumurilor1 S( +or (7t( !( la matric(a co)turilor ata7at2 grafului1 Algoritmul ()t( " pentru ,#-,n pentru i#-,n pentru %#-,n

ci%#min$ci%,ci,.c,%&
sf/pentru sf/pentru

sf/pentru Simulta cu !(t(rmi ar(a lu gimilor mi im( al( !rumurilor8 +ot fi r(6i ut( 7i o!uril( car( form(a02 !rumuril(1 Vom folo)i o matric( D#$di%&n'n al( c2r(i (l(m( t( di% )u t mul6imi !( o!uri1 El(m( tul di% *a r(+r(0( ta 3 fi al mul6im(a o!urilor c( +ot +r(c(!( +( '% 3 !rumul mi im !( la 'i la '%1 O!at2 cu i i6iali0ar(a matricii " cu matric(a co)turilor8 *om i i6iali0a 7i matric(a D a)tf(l" 0'i1 dac( ci%2* 3i i % di%# dac( ci%# sau i#%

P( m2)ur2 c( )( actuali0(a02 matric(a " *om actuali0a 7i matric(a D !u+2 cum urm(a02" 4 4 4 !ac2 ci%2ci,.c,% 8 atu ci di% r2m9 ( ()c,im5at !ac2 ci%#ci,.c,% .3 )(am 2 c2 am g2)it oi +o)i5ilit26i !( co )truir( a !rumului mi im !( la 'i la '% folo)i ! o!ul ,/ )( a!aug2 la di% o!uril( !i d,% !ac2 ci%4ci,.c,% )( i i6iali0(a02 di% cu d,%

: fi al r(co )tituir(a !rumurilor mi im( 3 tr( oricar( !ou2 *9rfuri 'i8'% )( fac( +or i ! !i '% a)tf(l" +r(c(!( tul lui '% 3l al(g(m !i mul6im(a di% a*9 ! u ul !i ac()t( o!uri fixat .)24l umim '5/8 +r(c(!( tul ac()tuia *a fi oric( o! !i mul6im(a di51 Proc(!(ul co ti u2 +9 2 a;u g(m la o!ul 'i1 6bser7a8ie" Dac2 ( i t(r()(a02 !oar c9t( u !rum +( tru fi(car( +(r(c,( !( o!uri 'i,'% *om co )i!(ra 3 locul matricii D o matric( D9 tot n'n a)tf(l 3 c9t d9i% )2 r(6i 2 u o! c(4l +oat( +r(c(!( +( '% 3 !rumul mi im !( la 'i la '%1 : ac()t ca08 algoritmul Flo<!4=ar),all ()t( urm2torul" pentru ,#-,n pentru i#-,n pentru %#-,n daca ci%4ci,.c,% atunci ci%#ci,.c,% di%#, sf/daca sf/pentru sf/pentru sf/pentru

Com+l(xitat(a algoritmului ()t( !( or!i ul 6$n:&1 Programul urm2tor im+l(m( t(a02 algoritmul 3 *aria ta !( mai )u)1 ;include2iostream<h4 ;include2fstream<h4 ;define = >) ;define ?=F -22-> int "@=A@=AB >>i itial matric(a co)turilor8a+oi a co)turilor !rumurilor int D@=A@=AB >>+( li ia !?i8;@- o!ul car( +oat( +r(c(!( o!ul ; >> +( !rumul mi im !( la o!ul i la o!ul ; int n,mB 7oid ?=?C"$& >>i itiali0(a0a matric(a co)turilor C 0 int i,%,'-,'D,costB ifstream f$Egraf<inF&B f44n44mB for$i#-Bi2#nBi..& 0 for$%#-B%2#nB%..& "@iA@%A#?=FB "@iA@iA#)B 1 for$i#-Bi2#mBi..& 0 f44'-44'D44costB "@'-A@'DA#costB 1 f<close$&B 1 7oid Drum$int i,int %& >>afi)(a0a u !rum !( la i la ; +or i ! !( la o!ul ; 0 if$%& 0 Drum$i,D@iA@%A&B cout22%22F FB 1 1 7oid AF?SA+!$& >>afi)ar(a r(0ultat(lor 0 int i,%B for$i#-Bi2#nBi..& for$%#-B%2#nB%..& 0 if$"@iA@%A##?=F& cout22GHnnu e'ista drum intre I22i22F si I22%22endlB else if$iJ#%& 0 cout22GHncost drum de la I22i22F la I22%22Feste F22"@iA@%AB

cout22GHtsuccesiunea de 7arfuri este: GB cout22i22F FB Drum$i,%&B 1 1 1 7oid main$& 0 int i,%,,B ?=?C"$&B for$,#-B,2#nB,..& for$i#-Bi2#nBi..& for$%#-B%2#nB%..& if$"@iA@,A2?=FKK"@,A@%A2?=F& if$"@iA@%A4"@iA@,A."@,A@%A& 0 "@iA@%A#"@iA@,A."@,A@%AB D@iA@%A#,B 1 AF?SA+!$&B 1

Algoritmul lui Dantzig


El r2m9 ( 7i 3 0il(l( oa)tr( c(l mai (fici( t algoritm 3 c((a c( +ri*(7t( *it(0a !( lucru8 )im+litat(a 7i im+l(m( tar(a +( calculator8 +( tru +ro5l(m(l( car( a+ar (f(cti* 3 +ractica (co omic21 Ac()t algoritm !(t(rmi 2 toat( !rumuril( !( lu gim( mi im2 car( +or ()c !( la u *arf !at )i a;u g la toat( c(l(lalt( *arfuri1 Ac()t algoritm a fo)t !at !( A1#1 Da t0ig8 3 &B'C8 car( la umit algoritmul simple'<
!nun8" $e consider un graf orientat G=(X,U) i o funcie cost:U->R+#$e desemnea un v%rf de plecare p# &entru orice v%rf i X se cere determinarea tuturor drumurilor de la p la i care au costul minim# P( tru r(0ol*ar(a ac()t(i +ro5l(m( )a *a folo)i algoritmul lui Da t0ig1 Ac()t algoritm o56i ( u graf +ar6ial al lui L#$M,N& 3 car( oric( !rum car( +l(ac2 !i p ()t( mi im8 : fa+t8 +( +arcur)ul algoritmului )( (limi 2 arc( al( grafului L8 arc( car( u +artici+2 la co )truir(a ici u ui !rum !( co)t mi im cu +l(car( !i p1 Strat(gia algoritmului )( 5a0(a02 +( o +arcurg(r( 3 l26im( a grafului L8 a!ic2 )(l(ctar(a o!urilor )( fac( 3 or!i (a a+ro+i(rii lor !( o!ul p !( +l(car(1 P( 5a0a co)turilor mi im( !(t(rmi at( )ucc()i*8 la fi(car( +a) al +arcurg(rii )( i!( tific2 u ou o!8 c(l mai a+ro+iat o! fa62 !( o!ul p !( +l(car(1 Not2m cu , ac()t o!1 Urm(a02 +roc()ul !( i!( tificar( a arc(lor car( )( *or a!2uga grafului +ar6ial8 !(oar(c( ac()t +roc() co !uc( la o56i (r(a u or !rumuri !( la p la , cu co)tul mi im !(t(rmi at1 Ac()t( arc( r()+(ct2 )imulta co !i6iil(" au (xtr(mitat(a i i6ial2 3 tr4u o! i !(;a )(l(ctat

au (xtr(mitat(a fi al2 3 o!ul , d@iA.cost@i,,A#min .u !( d@iA ()t( !i)ta 6a mi im2 !( la p la i 7i cost@i,,A ()t( co)ul arcului !( la i la ,/ Algoritmul )( o+r(7t( c9 ! fi( au fo)t )(l(ctat( toat( o!uril(8 fi( c9 ! u mai (xi)t2 !rumuri !( la + c2tr( *9rfuril( ()(l(ctat(1 Co )i!(r2m ca (x(m+lu graful urm2tor"
D D D D O P O

D : >

Pasul -" )( )(l(ct(a02 o!ul D8 d@DA#D 7i )( a!aug2 la graful +ar6ial arcul $-,D&

D P -

>

Pasul D" )( )(l(ct(a02 o!ul :8 d@:A#: 7i )( a!aug2 la graful +ar6ial arcul $-,:&

D D : > P

Pasul :" )( )(l(ct(a02 o!ul >8 d@>A#:8 )( a!aug2 la graful +ar6ial arc(l( $D,>& 7i $:,>&

D P D : >

Pasul O" )( )(l(ct(a02 o!ul O8 d@OA#O8 )( a!aug2 la graful +ar6ial arc(l( $D,O& 7i $>,O&

D D

D P

D : >

Pasul >" )( )(l(ct(a02 o!ul P8 d@PA#P8 )( a!aug2 la graful +ar6ial arcul $O,P&

D D

D D P

D : >

P( tru (x(m+lul co )i!(rat8 co)tul mi im !( la - la P ()t( P 7i )( o56i ( +ri !rumuril(" -DOP -D>OP -:>OP

Programul urm2tor im+l(m( t(a02 algoritmul lui Da t0ig1 Com+l(xitat(a ()t( 6$nD&1

;include2iostream<h4 ;include2fstream<h4 ;define = >) ;define ?=F -22-> int a@=A@=A,b@=A@=A,d@=A,st@=A,sos,pB int sel@=A,n,min,,B 7oid citire$& 0 ifstream f$Egraf<inF&B int i,%,', ,zB f44nB >> umarul !( o!uri >>i itiali0am matric(a co)turilor )i matric(a grafului +artial for$i#-Bi2#nBi..& for$%#-B%2#nB%..& 0 a@iA@%A#?=FB b@iA@%A#?=FB 1 for$i#-Bi2#nBi..& 0 a@iA@iA#)B b@iA@iA#)B 1 Rhile$Jfeof$f&& 0 f44'44 4zB>>arcul )i co)tul )au a@'A@ A#zB 1 f<close$&B 1 7oid minim$& 0 int i,%B min#?=FB for$i#-Bi2#nBi..& for$%#-B%2#nB%..& if$sel@iAKKJsel@%A& if$min4d@iA.a@iA@%A& 0 min#d@iA.a@iA@%AB ,#%B 1 1 7oid dantzig$& 0 int i,%B for$i#-Bi2#n--Bi..& 0 minim$&B if$minJ#?=F& 0 sel@,A#-B d@,A#minB for$%#-B%2#nB%..& if$sel@%AKK$d@%A.a@%A@,A##min&& b@%A@,A#a@%A@,AB 1 1 1 7oid drum$int ,& 0 int i,%B for$i#-Bi2#nBi..&

if$b@st@,--AA@iA2?=F KK Jsel@iA& 0 if$iJ#sos& 0 sel@iA#-B st@,A#iB drum$,.-&B sel@iA#)B 1 else 0 for$%#-B%2,B%..& cout22st@%AB cout22sos22G de cost I22d@sosA22FHnGB 1 1 1 7oid main$& 0 int iB citire$&B cout22Gplecare: GB cin44pB sel@pA#-B d@pA#)B dantzig$&B for$sos#-Bsos2#nBsos..& if$pJ#sos& 0 for$i#-Bi2#nBi..& sel@iA#)B sel@pA#-B st@-A#pB drum$D&B

Algoritmul Bellman-Kalaba

Ac()t algoritm !(trmi a !rumuril( !( *aloar( o+tima c( u ()c *arfuril( grafului cu u *arf fixat 1
!nun8" $e consider un graf orientat G=(X,U) cone!' fr circuite i o funcie de cost a:U->R# (esemn%ndu-se un nod x' se cere determinarea drumurilor de cost ma!im de la toate celelalte noduri la el' drumuri care includ un numr impus de arce (pai"# P( 5a0a matricii co)turilor grafului co )i!(rat8 algoritmul co )trui(7t( o ou2 matric( c 3 car( +( coloa a % .%Sn/ )( *or afla co)turil( maxim( al( !rumurilor c( a;u g 3 ' folo)i ! % arc(1 A)tf(l c@i,%A r(+r(0i t2 co)tul maxim al u ui !rum !( la i la ' 7i tr(c( +ri % arc(1 I i6ial8 matric(a c *a co 6i ( +( +rima coloa 2 co)tul arc(lor )+r( o!ul '8 !(ci !rumuri !( lu gim( &1 A !oua it(ra6i( *a !(t(rmi a co)turil( maxim( al( !rumurilor c( a;u g 3 ' 7i co 6i !ou2 arc(1 El( )( *or m(mora 3 a !oua coloa 2 7i )( *or !(t(rmi a +( 5a0a *alorilor !i coloa a a t(rioar21 A)tf(l8 +( tru !(t(rmi ar(a *alorii c@i,DA *om a!2uga +( r9 ! arc(l( c( +l(ac2 !i i c2tr( !rumuril( !( lu gim( & a t(rior !(t(rmi at(1 S( *a i!( tifica *aloar(a maxim2 !i tr( ac()t(a" c@i,DA#ma'$c@%,-A.a@i,,%AT%UM&1

a[i ,j]

% c[i,k -1]

'

A( (rali09 !8 +( tru a !(t(rmi a co)tul maxim al !rumului !( la i la ' folo)i ! , arc( )( calcul(a02" ma'$c@%,,--A.a@i,%AT% M&1 Num(r(l( !( +( fi(car( li i( a matric(i c *or forma u 7ir mo oto 1 Algoritmul )( 3 c,(i( 3 mom( ul 3 car( *aloril( )ituat( +( !ou2 coloa ( co )(cuti*( )u t i!( tic(8 !(ci c9 ! ici u !rum u )( +oat( maximi0a1 Fa+tul c2 u (xi)t2 circuit( 3 graf ( a)igur2 c2 um2rul maxim !( it(ra6ii ar +ut(a fi (gal cu n-- .n um2rul !( o!uri/1 Com+l(xitat(a algoritmului ()t( 6$n:&1 !'emplu" Co )i!(r2m graful !i figur2 7i !(t(rmi 2m !rumuril( maxim( c( a;u g 3 o!ul '#P1

D D D

D O P

: -

>

Not2m cu c$i& coloa a i !i matric(a c a !rumurilor maxim( c( a;u g 3 '#P folo)i ! i arc(1 Algoritmul )( 3 c,(i( la it(ra6ia D !(oar(c( c$O&#c$>&1

c$-& ---D Q )

c$D& -V V D Q )

c$:& -) -D V D Q )

c$O& -O -D V D Q )

c$>& -O -D V D Q )

;include2iostream<h4 ;include2fstream<h4 ;define = >) int a@=A@=A,c@=A@=AB int pasi,p-,n,'B unsigned char t@=A@=AB 7oid citire$& 0 ifstream f$Egraf<inF&B int i,%,', ,zB cin44nB >> umarul !( o!uri >>i itiali0am matric(a co)turilor )i matric(a grafului +artial for$i#-Bi2#nBi..& for$%#-B%2#nB%..& a@iA@%A#--B >>+( tru arc(l( li+)a for$i#-Bi2#nBi..& a@iA@iA#)B Rhile$Jfeof$f&& 0 f44'44 4zB>>arcul )i co)tul )au a@'A@ A#zB 1 f<close$&B 1 7oid initializari$& 0 int i,%B for$i#)Bi2#nBi..& for$%#)B%2#nB%..& 0 c@iA@%A#--B t@iA@%A#)B 1 for$%#-B%2#nB%..& 0

c@%A@-A#a@%A@'AB if$c@%A@-AJ#--& t@%A@-A#%B 1 1 7oid ,alaba$& 0 int i,%,o,,,B ,#DB do0 for$i#-Bi2#nBi..& for$%#-B%2#nB%..& if$a@iA@%AJ#-- KK c@%A@,--AJ#--& if$c@iA@,A2c@%A@,--A.a@iA@%A& 0 c@iA@,A#c@%A@,--A.a@iA@%AB t@iA@,A#%B 1 o,#-B for$i#-Bi2#nBi..& if$c@iA@,--AJ#c@iA@,A& 0 o,#)B brea,B 1 ,..B 1Rhile$Jo,&B 1 7oid drum$int ',int & 0 cout22'22F FB if$ J#-& drum$t@'A@ A, --&B 1 7oid scrie$& 0 if$c@p-A@pasiAJ#--& 0 Rhile$c@p-A@pasiA##c@p-A@pasi--A& pasi--B cout22Gdrum ma'im I22p-22F -4 I22'22F prin I22pasi22FarceHnGB cout22Gcostul I22c@p-A@pasiA22endlB drum$p-,pasi&B cout22'22endlB 1 else cout22Gnu e'istaHnGB 1 7oid main$& 0 citire$&B cout22Gplecare: GB cin4<p-B cout22Gsosire: GB cin4<'B cout22Gnumar pasi: GB cin44pasiB initializari$&B ,alaba$&B scrie$&B 1

Bibliografie &1 #ar0a8 Sil*iuE Moroga 8Lucia a8Maria8 )lgoritmica grafurilor' E!itura fu !ati(i !( mai (8 #ucur()ti8 $%%FE $1 Na!a5a 8 Sori E Sa !ru8 A !r((a8 )lgoritmica grafurilor'E!itura Mirto 8Timi)oara8$%%CE G1 Tra !afir8 Romica8 *odele si algoritmi de optimi are' E!itura AAIR8 #ucur()ti8 $%%'E