Está en la página 1de 20

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !

CE ) "o#a $

Anlisis y Diseo de Algoritmos II Apunte %&A Gra'o(


U) Gra'o es u)a estructura de datos )o *+)ea*. E) pr+)c+p+o puede co)s+derarse como u)a dup*a ,ue co)t+e)e - co)#u)tos. G = (V, A) V: conjunto de v rtices no v!c"o, #inito A: conjunto de !rist!s o !rcos #inito$ (puede ser v!c"o) .uede) ser c*as+'+cados de *a s+/u+e)te ma)era(

Gr!#o no dirigido:

0os arcos )o t+e)e) u)a d+recc+1) por *o ,ue2 e* arco $ 3 - es e* m+smo ,ue e* - 3 $.

Gr!#o dirigido:

0os arcos t+e)e) u)a d+recc+1). S+ ex+ste e* arco $ 3 - )o )ecesar+ame)te t+e)e ,ue ex+st+r e* - 3 $.

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a -

%ecorrido de un Gr!#o: Dept& 'irst (e!rc& (%ecorrido en )ro#undid!d): &ado u) Gra'o G 4 (52 A) y u) 67rt+ce 62 perte)ec+e)te a 52 &FS recorre e* /ra'o desde e* pr+mer adyace)te )o 6+s+tado de 6. E#emp*o(

Supo)+e)do ,ue 6 es $2 e* recorr+do ser8 e* s+/u+e)te(

void DFS(grafo g, int v, bool visitado[N], int padre[N]){ visitado[v] = 1; list<int> Adya e!tes = g"devolver#adya e!tes(v); list<int>$$iterator it = Adya e!tes"%egi!(); while (it &= Adya e!tes"e!d()){ if (&visitado['it]){ padre['it] = v; DFS(g,'it,visitado,padre); ( it)); ( ( void *e orrido#+!#,rof-!didad(grafo g, int padre[N]){ bool visitado[N]; for (int i = 1; i <= N; i))){ visitado[i] = .; padre[i] = .; ( for(int verti e = 1; verti e <= N; verti e))) if (&visitado[verti e]) DFS(g,verti e,visitado,padre); (//padre v-elve 0odifi ado o! el re orrido del DFS

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a 9

*re!dt& 'irst (e!rc& (%ecorrido en Anc&o): &ado u) Gra'o G 4 (52 A) y u) 67rt+ce 62 perte)ec+e)te a 52 :FS recorre e* /ra'o 6+s+ta)do pr+mero todos *os adyace)tes de 6. E#emp*o(

Suponiendo que v es 1, el recorrido ser el siguiente:

void 1FS(grafo g, int v, bool visitado[N], int padre[N]){ visitado[v] = 1; list<int> Adya e!tes = g"devolver#adya e!tes(v); list<int>$$iterator it; for(it = Adya e!tes"%egi!(); it &= Adya e!tes"e!d(); it))) if (&visitado['it]){ padre['it] = v; visitado['it] = 1; ( it = Adya e!tes"%egi!(); while (it &= Adya e!tes"e!d()){ if (padre['it] == v) 1FS(g,'it,visitado,padre); it)); ( ( void *e orrido#+!#A! 2o(grafo g, int padre[N]){ bool visitado[N]; for (int i = 1; i <= N; i))){ visitado[i] = .; padre[i] = .; ( for(int verti e = 1; verti e <= N; verti e))) if (&visitado[verti e]) 1FS(g,verti e,visitado,padre); (//padre v-elve 0odifi ado o! el re orrido del 1FS

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a ;

+iclos en un Gr!#o:

Ciclos simples: U) /ra'o t+e)e c+c*os2 s+ cua)do *o recorremos por med+o de u) &FS part+e)do de a*/<) 67rt+ce2 podemos **e/ar a* 67rt+ce de* ,ue part+mos. E#emp*o(

3defi!e 14AN56 . //!o 2a sido visitado 3defi!e 7*8S 1 //se 2a visitado e! la ra0a (el DFS ya 2a pasado por ese l-gar) 3defi!e N+7*6 9 //se 2a visitado por o0pleto el verti e //(!o tie!e 0as adya e!tes para ser visitados) bool :ay#5i lo(grafo g, int verti e, int visitado[N]){ bool fo-!d = .; visitado[verti e] = 7*8S; list<int> Adya e!tes = g"devolver#adya e!tes(verti e); list<int>$$iterator it = Adya e!tes"%egi!(); while ((it &= Adya e!tes"e!d());;(&fo-!d)){ if (visitado['it] == 14AN56) fo-!d = :ay#5i lo(g,'it,visitado); else if (visitado['it] == 7*8S) fo-!d = 1; it)); ( visitado[verti e] = N+7*6; return fo-!d; (//fo-!d retor!a 1, si 2ay i lo y . e! aso de <-e !o lo 2aya"

Es +mporta)te 6er ,ue cua)do *o marcamos como e) *a recurs+1).

EGRO2 es cua)do 6o*6emos

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a =

+iclo ,!miltoni!no: U) /ra'o t+e)e c+c*o >am+*to)+a)o cua)do *o recorremos por med+o de u) &FS part+e)do de a*/<) 67rt+ce y podemos **e/ar a* 67rt+ce de* ,ue part+mos pasa)do exactame)te $ 6e? por cada u)o de *os 67rt+ces. E#emp*o(

bool todos=isitados(bool visitado[N]){ for(int i = 1; i <= N; i))) if (&visitado[i]) return .; return 1; ( /' -a!do se lla0a a la f-! io!, verti e y pri0ero, de%e! ser ig-ales, el arreglo visitado vie!e i!i iali>ado e! .'/ bool :ay#5i lo#:a0ilto!ia!o(grafo g, int verti e, bool visitado[N], int pri0ero){ visitado[verti e] = 1; list<int> Adya e!tes = g"devolver#adya e!tes(verti e); list<int>$$iterator it; bool fo-!d = .; for(it = Adya e!tes"%egi!(); it &= Adya e!tes"e!d() ;; &fo-!d; it))){ if (&visitado['it]){ fo-!d = :ay#5i lo#:a0ilto!ia!o(g,'it,visitado,pri0ero); visitado['it] = .; ( else if ('it == pri0ero) fo-!d = todos=isitados(visitado); ( return fo-!d; (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a @

+iclo -uleri!no: U) /ra'o t+e)e c+c*o Eu*er+a)o cua)do *o recorremos por med+o de u) &FS part+e)do de a*/<) 67rt+ce y podemos **e/ar a* 67rt+ce de* ,ue part+mos pasa)do exactame)te $ 6e? por cada u)o de *os arcos2 pud+e)do pasar m8s de u)a 6e? por cada 67rt+ce. Ejemplo:

struct ar o{int orige!; int desti!o; int osto; (;

void rear#lista#de#aristas((grafo g, list<ar o'> ;aristas){ list<int> Adya e!tes; list<int>$$iterator it; for(int i=1; i <= N; i))){ Adya e!tes = g"devolver#adya e!tes(i); for(it = Adya e!tes"%egi!(); it &= Adya e!tes"e!d(); it))) Agregar#Arista(aristas,i, 'it, g" osto#e!tre(i, 'it));//-sado e! ?r-s?al ( ( bool 5a0i!o#!o#@sado(int -,int v,list<ar o'> aristas){ for(list<ar o'>$$iterator it = aristas"%egi!(); it &= aristas"e!d();it))) if ((('it)A>orige! == -) ;; (('it)A>desti!o == v)) return 1; return .; (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a A

void eli0i!ar(int -,int v, list<ar o'> ;aristas){ list<ar o'>$$iterator it = aristas"%egi!(); list<ar o'>$$iterator %orrar; while(it &= aristas"e!d()){ %orrar = it; it)); if ((('%orrar)A>orige! == -) ;; (('%orrar)A>desti!o == v)) aristas"erase(%orrar); ( ( bool 5i lo#+-leria!o(grafo g, list<ar o'> ;aristas, int verti e, int pri0ero, list<ar o'> ; a0i!o){ bool fo-!d = .; if (&aristas"e0pty()){ list<int> Adya e!tes = g"devolver#adya e!tes(verti e); list<int>$$iterator it = Adya e!tes"%egi!(); while(it &= Adya e!tes"e!d() ;; &fo-!d){ if (5a0i!o#!o#@sado(verti e,'it,aristas)){ Agregar#Arista( a0i!o,verti e, 'it, g" osto#e!tre(verti e, 'it)); eli0i!ar(verti e,'it,aristas); fo-!d = 5i lo#+-leria!o(g, aristas, 'it, pri0ero, a0i!o); if (&fo-!d){ Agregar#Arista(aristas,verti e, 'it, g" osto#e!tre(verti e, 'it)); a0i!o"pop#%a ?(); ( ( it)); ( ( else if (verti e == pri0ero) fo-!d = 1; return fo-!d; (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a B

.rden /opol0gico de un Gr!#o: &ado u) /ra'o d+r+/+do acCc*+co G 4 (52 A)2 para todo par de 67rt+ces 62 D perte)ec+e)te a 52 ta* ,ue 6 D e)to)ces 6 debe aparecer pr+mero e) *a secue)c+a. .ara armar esta secue)c+a so*o basta co) a)otar e) u)a p+*a *os 67rt+ces comp*etame)te exp*orados por e* &FS. E#emp*o(

E* orde) topo*1/+co ser8 e* s+/u+e)te(

void DFS(grafo g, int v, bool visitado[N], list<int> ;pila){ visitado[v] = 1; list<int> Adya e!tes = g"devolver#adya e!tes(v); list<int>$$iterator it = Adya e!tes"%egi!(); while (it &= Adya e!tes"e!d()){ if (&visitado['it]){ DFS(g,'it,visitado,pila); pila"p-s2#fro!t('it); ( it)); ( ( void 6rde!#Bopologi o(grafo g, list<int> ;pila){ bool visitado[N]; pila" lear(); for (int i = 1; i <= N; i))) visitado[i] = .; for(int verti e = 1; verti e <= N; verti e))) if (&visitado[verti e]){ DFS(g,verti e,visitado,pila); pila"p-s2#fro!t(verti e); ( (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a E

+omponentes 'uertemente +onect!d!s de un Gr!#o: &ado u) /ra'o d+r+/+do G 4 (52 A)2 e* co)#u)to m8x+mo de 67rt+ces 5F co)te)+do e) 52 ta* ,ue para cada par de 67rt+ces u y 6 e) 5F2 ex+ste u) cam+)o ta)to de u 6 como de 6 u es *o ,ue se co)oce como compo)e)tes 'uerteme)te co)ectadas. .ara armar este a*/or+tmo so*o basta co) se/u+r *os s+/u+e)tes pasos. $G Ap*+car &FS y )umerar *os )odos e) postorde) e) *a 6ue*ta de *a recurs+1) de* Gra'o G. (ut+*+?amos e* m+smo a*/or+tmo ,ue e* orde) topo*1/+co para /e)erar *a p+*a2 pero es +mporta)te destacar ,ue esta p+*a )o )os de6ue*6e e* orde) topo*1/+co s+ e* /ra'o es cCc*+co) -G Co)stru+r e* Gra'o +)6ert+do GR. 9G "acer e* recorr+do e) pro'u)d+dad e) e* orde) de *a p+*a. E#emp*o( Gra'o G(

$G.+*a(

-GGra'o GR(

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $H

9GCompo)e)tes Fuerteme)te Co)ectadas(

void i!vertir#grafo(grafo g, grafo ;7*){ list<int> Adya e!tes; list<int>$$iterator it; for(int verti e = 1; verti e <= N; verti e))){ Adya e!tes = g"devolver#adya e!tes(verti e); for(it = Adya e!tes"%egi!(); it &= Adya e!tes"e!d(); it))) 7*"agregar#ar o('it,verti e,g" osto#e!tre(verti e,'it)); Adya e!tes" lear(); ( ( void 5o0pF-erte0e!te5o!e tadas(grafo 7*, list<int> pila){ list<int> o0pF; bool visitado[N]; for (int i = 1; i <= N; i))) visitado[i] = .; for(list<int>$$iterator it = pila"%egi!(); it &= pila"e!d(); it))) if (&visitado['it]){ DFS(7*,'it,visitado, o0pF); o0pF"p-s2#fro!t('it); 0ostrar#lista( o0pF); o0pF" lear(); ( ( void Costrar5F5(grafo g){ list<int> pila; int padre[N]; grafo 7*(N); 6rde!#Bopologi o(g,pila); i!vertir#grafo(g,7*); 5o0pF-erte0e!te5o!e tadas(7*,pila); (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $$

*1s2ued!s de +!minos 3!s +ortos:

Algoritmo de Dij4str!: &e6ue*6e u) arre/*o co) *os costos de *os cam+)os mas cortos e)tre u) 67rt+ce 6 dado y e* resto. Ut+*+?a t7c)+ca Greedy2 +)corpora)do u) 67rt+ce a u) co)#u)to S cuya d+sta)c+a a* 67rt+ce dado sea *a mas corta pos+b*e. Ademas ut+*+?a otro arre/*o padre2 do)de se /uarda e* cam+)o se/u+do para obte)er e* me)or costo. E#emp*o(

S+ tomamos 6 +/ua* a ; e)to)ces(

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $bool ,erte!e e(list<int> 4, int valor){ list<int>$$iterator i = 4"%egi!(); while (i &= 4"e!d() ;; (valor&='i)) i)); if (valor=='i) return 1; return .; ( int Ci!i0o(int D[N], list<int> sol- io!){ int valor#0i!i0o = 8NF; int i!di e#0i!i0o = 8NF; for(int i=1 ; i<=N ; i))) if (&,erte!e e(sol- io!,i)) if (D[i] < valor#0i!i0o){ valor#0i!i0o = D[i]; i!di e#0i!i0o = i; ( return i!di e#0i!i0o; ( int Ci!(int D[N],int Catri>[N][N],int pos0i!,int v){ if (D[v]<(Catri>[pos0i!][v] ) D[pos0i!])) return D[v]; return (Catri>[pos0i!][v] ) D[pos0i!]); ( void DiD?stra(int Catri>[N][N], int D[N], int verti e, int ,[N]){ list<int> S; S"p-s2#%a ?(verti e); for(int i = 1; i <= N; i))){ D[i] = Catri>[verti e][i]; if ((D[i] &= 8NF) ;; (D[i] &= .)) ,[i] = verti e; else ,[i] = A1; ( for(int t = 1; t <= N; t))){ int pos0i! = Ci!i0o(D,S); S"p-s2#%a ?(pos0i!); for(int v=1; v <= N; v))) if (&,erte!e e(S,v)){ int g-ardovalor = Ci!(D,Catri>,pos0i!,v); if (D[v] &= g-ardovalor){ D[v] = g-ardovalor; ,[v] = pos0i!; ( ( ( (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $9

Algoritmo de 'loyd: &e6ue*6e u)a Matr+? AI JI J co) *os costos de *os cam+)os mas cortos e)tre todo par de 67rt+ces2 a part+r de u)a matr+? de costos CI JI J. &o)de CI+JI#J es e* costo de + # 4 # +2 y CI+JI+J 4 H. Ut+*+?a .ro/ramac+1) d+)8m+ca. E#emp*o( Gra'o(

CI JI J(

AI JI J(

void Floyd(int 5[N][N], int A[N][N]){ for(int i=1 ; i<=N ; i))) for(int D=1 ; D<=N ; D))) A[i][D]=5[i][D];// opio la 0atri> origi!al e! A for(int ?=1; ?<=N; ?))) for(int i=1; i<=N; i))) for(int D=1; D<=N; D))) if((A[i][?] ) A[?][D])< A[i][D]) A[i][D] = A[i][?] ) A[?][D]; (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $;

5r6ol de %ecu6rimiento 3"nimo: &ado u) /ra'o co)exo )o d+r+/+do G 4 (52 A)2 e* prob*ema es e)co)trar u) /ra'o ta* ,ue *a suma de *os costos de *as ar+stas sea mC)+ma2 y )o ,uede) 67rt+ces s+) co)ectar. .ara esto se prese)ta) - a*/or+tmos.

Algoritmo de )rim: Este a*/or+tmo2 ut+*+?a u) co)#u)to so*uc+1) S2 do)de ya est8) *os 67rt+ces cuyo costo es mC)+mo2 y u) co)#u)to de 67rt+ces 5 e) e* cua* se e)cue)tra) todos *os 67rt+ces. 0a +dea pr+)c+pa* es2 e*e/+r u) 67rt+ce cua*,u+era de 52 a/re/ar*o a S2 se*ecc+o)ar u) 67rt+ce de 5 cuyo costo co) cua*,u+era de *os 67rt+ces de S sea mC)+mo2 y a/re/ar*o a* co)#u)to so*uc+1) >asta ,ue me ,uede s+) 67rt+ces. S+empre te)+e)do e) cue)ta de )o repet+r 67rt+ces. E#emp*o(

S+ tomamos e* 67rt+ce $ e)to)ces(

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $=

struct ar o{int orige!; int desti!o; int osto; (; /'e! 2 se dev-elve el grafo de 0i!i0o osto" 2 vie!e i!i iali>ado -!i a0e!te o! los verti es, los ar os se ira! agrega!do d-ra!te la eDe - io! del algorit0o'/ void ,ri0(grafo g, grafo ;2){ ar o 0i!; list<int> s,v; v = g"devolver#verti es(); s"p-s2#%a ?(v"fro!t()); v"pop#fro!t(); list<int>$$iterator its; list<int>$$iterator itv; while (&v"e0pty()){ 0i!" osto = 8NF8N8B6; for(its = s"%egi!(); its &= s"e!d(); its))) for(itv = v"%egi!(); itv &= v"e!d(); itv))) if (g" osto#e!tre('its,'itv) < 0i!" osto){ 0i!" osto = g" osto#e!tre('its,'itv); 0i!"orige! = 'its; 0i!"desti!o = 'itv; ( s"p-s2#%a ?(0i!"desti!o); v"re0ove(0i!"desti!o); 2"agregar#ar o(0i!"orige!,0i!"desti!o,0i!" osto); ( (

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $@

Algoritmo de 7rus4!l: Este a*/or+tmo2 ut+*+?a u) co)#u)to de ar+stas A do)de se 6a) /uarda)do *as ar+stas de mC)+mo costo2 y u)a '+*a de ar+stas '+*a2 e) e* cua* se e)cue)tra) todas *as ar+stas orde)adas asce)de)teme)te se/<) costo. 0a +dea pr+)c+pa* es2 e*e/+r *a ar+sta de mC)+mo costo perte)ec+e)te a '+*a y a/re/ar*a a A2 s+empre ,ue )o se /e)ere c+c*o2 >asta ,ue *a ca)t+dad de ar+stas de A sea *a ca)t+dad de 6ert+ces G$. E#emp*o(

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $A struct ar o{int orige!; int desti!o; int osto; (; void i!sertar6rde!ado(list<ar o'> ;fila, ar o ' !-evo){ list<ar o'>$$iterator it = fila"%egi!(); while((it &= fila"e!d()) ;; ((('it)A> osto) < (!-evoA> osto))) it)); fila"i!sert(it,1,!-evo);//i!serta -!a posi io! atras del iterador ( void argarFila(grafo g, list<ar o'> ;fila){ list<int> Adya e!tes; list<int>$$iterator it; for(int i=1; i <= N; i))){ Adya e!tes = g"devolver#adya e!tes(i); for(it = Adya e!tes"%egi!(); it &= Adya e!tes"e!d(); it))){ ar o ' !-evo = new ar o; !-evoA>orige! = i; !-evoA>desti!o = 'it; !-evoA> osto = g" osto#ar o(i,'it); i!sertar6rde!ado(fila,!-evo); ( ( ( void Agregar#Arista(list<ar o'> ; A, int -, int v, int ar o ' !-evo = new ar o; !-evoA>orige! = -; !-evoA>desti!o = v; !-evoA> osto = ; A"p-s2#%a ?(!-evo); ( ){

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $B

/'e! 2 se dev-elve el grafo de 0i!i0o osto" 2 vie!e i!i iali>ado -!i a0e!te o! los verti es, los ar os se ira! agrega!do d-ra!te la eDe - io! del algorit0o'/ void Er-s?al(grafo g, grafo ;2){ list<ar o'> fila; list<ar o'> A; argarFila(g,fila); while (A"si>e() < NA1){ int - = fila"fro!t()A>orige!; int v = fila"fro!t()A>desti!o; int = fila"fro!t()A> osto; fila"pop#fro!t(); //eFiste# a0i!o es -tili>ado para verifi ar <-e !o se ge!era i lo" if (&2"eFiste# a0i!o(-,v)){ 2"agregar#ar o(-,v, ); Agregar#Arista(A,-,v, ); ( ( (

Come)tar+o( %a)to para .r+m como para KrusLa*2 te)er e) cue)ta ,ue e* a/re/arMarco2 a* ser u) /ra'o )o d+r+/+do2 te)drCa ,ue a/re/ar u) arco ta)to de or+/e) a dest+)o2 como de dest+)o a or+/e).

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a $E

)ro6lem!s 8):

Algoritmo de Coloreo: E* prob*ema co)s+ste e) as+/)ar u) co*or a cada 67rt+ce de u) /ra'o de ma)era ,ue 67rt+ces adyace)tes2 )o posea) e* m+smo co*or y ut+*+?a)do *a me)or ca)t+dad de co*ores pos+b*es. .ara este prob*ema se p*a)tea u) a*/or+tmo >eurCst+co2 ,ue )o s+empre da *a me#or so*uc+1)2 pero e) /e)era* es 1pt+mo. E#emp*o(

bool p-eda# olorear(grafo g, int verti e, int olor, int 5olores[N]){ list<int> Adya e!tes = g"devolver#adya e!tes(verti e); list<int>$$iterator it = Adya e!tes"%egi!(); while ((it &= Adya e!tes"e!d());;(5olores['it] &= olor)) it)); if (it == Adya e!tes"e!d()) return 1; return .; ( /'5olores se i!i iali>a e! -! valor espe ial'/ void N,#5oloreo(grafo g, int 5olores[N]){ for (int verti e = 1; verti e <= N; verti e))){ int olor = 1; while (&p-eda# olorear(g, verti e, olor, 5olores)) olor)); 5olores[verti e] = olor; ( (

.ara este e#emp*o e* co*or $ serCa e* Ro#o2 e* - 5erde y e* 9 Ce*este.

Grupo CUYS (Como usted ya sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (U !CE ) "o#a -H

Verte9 +over: &ado u) G 4 (52 A) )o d+r+/+do2 e* prob*ema es e)co)trar u) co)#u)to de tamaNo mC)+mo C perte)ec+e)te a 52 ta* ,ue C cubra todos *os arcos A. .ara este prob*ema se p*a)tea u) a*/or+tmo >eurCst+co2 ,ue )o s+empre da *a me#or so*uc+1)2 pero e) /e)era* es 1pt+mo. E#emp*o(

E* Co)#u)to mC)+mo de 67rt+ces ,ue cubre todos *os arcos es ;2$2-.


void eli0i!ar#ar os#i! ide!tes(list<ar o'> ;l, int verti e){ list<ar o'>$$iterator it = l"%egi!(); list<ar o'>$$iterator %orrar; while(it &= l"e!d()){ %orrar = it; it)); if ((('%orrar)A>orige! == verti e) GG (('%orrar)A>desti!o == verti e)) l"erase(%orrar); ( ( void verteF# over(grafo g, list<int> ; 5){ list<ar o'> l; rear#lista#de#aristas(g,l); list<ar o'>$$iterator it = l"%egi!(); while(&l"e0pty()){ //eliDo -! verti e ar%itrario (to0o el 1H) 5"p-s2#fro!t(('it)A>orige!); eli0i!ar#ar os#i! ide!tes(l,('it)A>orige!); it = l"%egi!(); ( (//se podria 0eDorar orde!a!do l de 0ayor a 0e!or por

a!tidad de i! ide! ia"