Algoritmii Grafurilor Lab2-3 MV

download Algoritmii Grafurilor Lab2-3 MV

of 15

Transcript of Algoritmii Grafurilor Lab2-3 MV

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    1/15

    Ministerul Educatiei al Republicii Moldova

    „Facultatea de Matematica siInformatica”

     

     Realizat : Mure anu Victor,ș

      Studentul grupei I-21

    Verificat :  urcanu CalinȚ  

    Universitatea de Stat din Moldova

     Lucrarea de laborator nr 2-3

    Tema: ”  Colorarea corectă a grafului ”

     Metoda Succesivă. Algoritul lui !rus"al 

     #isci$lina: %Algoritica &rafurilor” 

    '(i inău 2)*+

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    2/15

    Introducere

    COLORAREA GRAFURILOR 

    Problemele de colorare ocupă un loc important în teoria grafurilor atât prin rezultatele

    teoretice impunătoare, cât şi prin utilizarea acestora la soluionarea problemelor practice! Printre

     problemele practice, la soluionarea cărora se folosesc rezultatele ce in de colorarea elementelor 

    grafului, pot fi menionate problemele ce apar în procesul de planificare a procesului de

     producere, problemele de stocare şi transportare a mărfurilor, problema orarului etc!

    Colorarea vârfurilor

    Fie"#$ U   !  =  un graf arbitrar şi

    "   un număr natural! %plicaia

    { }"    f    ,!!!,&,'(   →  se

    numeşte "-colorare  a v#rfurilor   grafului!

    ! )umărul"$ $ f  

      asociat *ârfului  $  se numeşte

    culoare a acestui *ârf!

    Definiie ! % "-colorare, determinată de aplica&ia+,!!!,&,'( "    f     → , se nume'te corectă,

    dacă pentru oricare două v#rfuri adiacente $ 'i ( ale grafului - culorile atribuite lor sunt

    distincte adică are loc relaia"$"$  ( f   $ f     ≠

    !

    -raful pentru care e.istă o " /colorare corectă se numeşte "-colorabil !  0inând cont de

    definiia ', s/ar putea de spus că o colorare corectă a *ârfurilor grafului ! determină o partiie a

    mulimii de *ârfuri   în" l  ≤

     submulimi, adică

    l            !!!&'   UU=,

    " l  ≤,

    " # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    3/15

     X i∩X  j= Ø  !

    Fiecare clasă  X i=1,2,…,l  este o mulime stabilă interior, numită clasa culorii i!

    Definiie !  )umărul minimal posibil de culori într/o colorare corectă a *îrfurilor  grafului -

    se numeşte nuăr croatic al grafului - şi se notează prin"$! χ )

    1n cazul" !   ="$ χ 

    , se mai spune că graful!

      este " /cromatic! 2 " /colorare corectă a

    grafului!

     se numeşte minimală, dacă"$!"    χ =!

    Aplica ie!ț  3ă e.aminăm următoarea situa ie! Presupunem că suntem o firmă de lapte dinț4ânce ti, am ac5izi ionat utila6e ultra/moderne din -ermania i 37% i garantăm cu inter*al deș ț ș șîncredere de 89: că producem lapte fără e/uri , conser*a i, de calitate superioară! ;rem să nețe.tindem afacerea în C5i inău! %m înc5eiat rela ii de parteneriat cu magazinile )

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    4/15

     )

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    5/15

    3e pune problema găsirii unei " /colorări corecte, astfel încât

    "$!"    χ =

     , iar în cazul nostru,"$! χ * +)

    3ă elaborăm algoritmul de colorare corectă a grafului, utilizând metoda succesi*ă!

    '" %ran6ăm *ârfurile grafului într/o ordine necrescătoare a gradelor şi atribuim primului *ârf din lista ordonată culoarea '!

    &" Parcurgem lista şi atribuim culoarea ' fiecărui *ârf neadiacent cu nici unul din *ârfurilede6a colorate cu această culoare! %poi re*enim la primul *ârf necolorat!

    ?" %tribuim acestui *ârf culoarea & şi din nou parcurgem lista ordonată a gradelor *ârfurilor,colorând cu culoarea & fiecare *ârf încă necolorat şi neadiacent cu nici unul din *ârfurile

    de6a colorate cu această culoare!@" Procedeul se repetă până *or fi colorate toate *ârfurile grafului!9" )umărul de culori utilizate la această colorare este o apro.imare a numărului cromatic al

    grafului!A" %lgoritmul e.pus poate fi modificat! 7na din modificările simple constă în reordonarea

    *ârfurilor necolorate după fiecare etapă de colorare! ;ârfurile necolorate se rearan6ează înordinea necrescătoare a gradelor sale relati*e!

    ( # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    6/15

    B" Prin grade relati*e *om înelege gradele *ârfurilor în subgraful obinut din graful iniialdupă eliminarea *ârfurilor de6a colorate! acă două *ârfuri *or a*ea grade egale, atunciordinea apariiei acestora în lista ordonată este aleatorie!

    Codul C))* +,o- utili.a parcur%erea /F01

    Dinclude EiostreamDinclude EGindoGs!5

    using namespace std#

    const int M%H ?J#int n '8#int rezK9JL,*izK9JL#

    int culori$doubleKLKM%HL, int nr*f"#

    *oid setcolor$int"#int main$"  double matri.KM%HLKM%HL == ' & ? @ 9 A B N 8 I' I& I? I@ I9 IA IB IN I8 I'J  J, '!&8, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J+, =='  '!&8, J, &!J@, J, J, J, J, J, J, J, J, J, J, J, @!'@, J, J, J, N!'@+, ==&  J, &!J@, J, @!JN, J, J, J, J, J, J, J, ?!A?, J, J, J, J, J, J, J+, ==?  J, J, @!JN, J, J!BA, J, J, J, J, J, J, '!BB, J, J, J, J, J, J, J+, ==@

      J, J, J, J!BA, J, J, J, J, J, '!?', J!N, J, J, J, J, J, J, J, J+, ==9  J, J, J, J, J, J, J, J, J, J, J, J, J!A, J, J, J, J, J, J+, ==A  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J!@, ?!@, J, J+, ==B  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, ?!J&, J, J!?N, J+, ==N  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J!?N, J, '!9A+, ==8  J, J, J, J, '!?', J, J, J, J, J, J!B, J, '!&?, J, J, J, J, J, J+, ==I'  J, J, J, J, J!N, J, J, J, J, J!B, J, J!AA, J, '!&', J, J, J, J, J+, ==I&  J, J, ?!A?, '!BB, J, J, J, J, J, J, J!AA, J, J, J, '!&9, J, J, J, J+, ==I?  J, J, J, J, J, J!A, J, J, J, '!&?, J, J, J, '!@A, J, J, J, J, J+, ==I@  J, J, J, J, J, J, J, J, J, J, '!&', J, '!@A, J, J!9@, J!', J, J, J+, ==I9  J, @!'@, J, J, J, J, J, J, J, J, J, '!&9, J, J!9@, J, J, J, J, J+, ==IA  J, J, J, J, J, J, J!@, ?!J&, J, J, J, J, J, J!', J, J, J, J, J+, ==IB  J, J, J, J, J, J, ?!@, J, J!?N, J, J, J, J, J, J, J, J, J!N, J+, ==IN  J, J, J, J, J, J, J, J!?N, J, J, J, J, J, J, J, J, J!N, J, '!?N+, ==I8  J, N!'@, J, J, J, J, J, J, '!9A, J, J, J, J, J, J, J, J, '!?N, J+, ==I'J+#  int i, 6, a, nr*f#  int .,O,c,s,ma.imJ#

    2 # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    7/15

      setcolor$'9"#

      cout EE ati nodul de inceput (#  cin s#  for$int iJ#iEn#iQQ"

      if$R*izKiL"  cculori$matri., s"#  if$cma.im" ma.imc#  +  coutEEC5i EEma.imEESn#  for$int i'#iEma.im#iQQ"    setcolor$iQ8"#  coutEEculoarea EEiEE( #  for$int 6J#6En#6QQ"  if$*izK6Li" coutEE6EE #

      coutEEendl#  +

      setcolor$'9"#  return J#+

    *oid setcolor$int color"

    4%)TU 5con -et3td4andle$3V27VP7V4%)TU"#3etConsoleVe.t%ttribute$5con,color"#

    +int culori$double matri.KLKM%HL, int nr*f"  int *ecin,parc,i,rezK9JL,6,c',ma.im,t,gasit#  *ecinparcJ#  *izKnr*fL'#  rezKJL nr*f#  G5ile$*ecin E parc"    for$i J# i E n# iQQ"    if$matri.KrezK*ecinLLKiL WW R*izKiL"    parcQQ#  rezKparcL i#  ma.im J#  for$int XJ# XEn# XQQ"  if$matri.KiLKXL WW *izKXL ma.im" ma.im *izKXL#

    3 # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    8/15

      t '#  do   gasit J#  for$int XJ# XEn# XQQ"  if$matri.KiLKXL WW *izKXLt" gasit'#

      if$gasit" tQQ#  +  G5ile$t E ma.im WW gasit"#  if$gasit" *izKiL ma.imQ'#  else *izKiL t#  +  +  *ecinQQ#  +

      for$iJ#iEparc#iQQ" if$*izKrezKiLLc" c*izKrezKiLL#

      return c#Re.ultat*

    4 # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    9/15

    upă cum se obser*ă, am ob inut egalitateaț"$!"    χ =, ceea ce înseamnă că colorarea a fost

    corectă!

    Al%orit-ul lui 5rus6al

      %lgoritmul lui YrusXal este un algoritm în teoria grafurilor care găse te arborele par ial deș țcost minim pentru un graf cone. ponderat! Cu alte cu*inte, găse te submul imea muc5iilor careș țformează un arbore care include toate *ârfurile i care este minimizat din punct de *edere alșcostului! acă graful nu este cone., atunci algoritmul găse te o pădure par ială de cost minimș ț$un arbore par ial de cost minim pentru fiecare componentă cone.ă"! %lgoritmul lui YrusXal estețun e.emplu de algoritm greedO!

    %lgoritmul func ionează în felul următor(ț

    7 # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    10/15

     asul 1) Construim graful   T 1=On+u1 , adăugând la graful *id, construit pe mulimea de

    *ârfuri  , muc5ia u1 ϵ U   cu pondere minimă!

     asul 2) Pentru graful construit T i , cu i

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    11/15

    Pas ?" Incrementăm costul i obser*ăm că CF i CU au cost @! %legem unul din ei $CF" iș ș ș*erificăm dacă CF este adiacent cu arborele ' sau & [ nu! 1i atribuim etic5eta ?!

    Pas @" ;erificăm pe CU dacă este adiacent cu arborele ', & sau ?! Uste adiacent cu CF , U4 i U-!ș

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    12/15

    Pas N" Cercetăm %F N! 2bser*ăm că dacă îl includem în listă el formează ciclu! )oduri nu maie.istă, deci algoritmul finisează!

    3ă interpretăm algoritmul respecti* în problema noastră descrisă în laboratorul &! e această datăîncercăm să găsim cea mai scurtă distan ă de la noduri e.reme! Cu alte cu*inte, căutămțcostul minim al grafului!

    Codul C))*

    Dinclude EiostreamDincludeEconio!5DincludeEstdlib!5

    using namespace std#int i,6,X#int a,b,u,*#int n,nr'#double minim, costmin J,*izitK'8L#int find$int"#int uni$int,int"#

      double costK?JLK?JL == ' & ? @ 9 A B N 8 I' I& I? I@ I9 IA IB IN I8 I'J  J, '!&8, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J+, =='  '!&8, J, &!J@, J, J, J, J, J, J, J, J, J, J, J, @!'@, J, J, J, N!'@+, ==&  J, &!J@, J, @!JN, J, J, J, J, J, J, J, ?!A?, J, J, J, J, J, J, J+, ==?  J, J, @!JN, J, J!BA, J, J, J, J, J, J, '!BB, J, J, J, J, J, J, J+, ==@

      J, J, J, J!BA, J, J, J, J, J, '!?', J!N, J, J, J, J, J, J, J, J+, ==9  J, J, J, J, J, J, J, J, J, J, J, J, J!A, J, J, J, J, J, J+, ==A  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J!@, ?!@, J, J+, ==B  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, ?!J&, J, J!?N, J+, ==N  J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J, J!?N, J, '!9A+, ==8  J, J, J, J, '!?', J, J, J, J, J, J!B, J, '!&?, J, J, J, J, J, J+, ==I'  J, J, J, J, J!N, J, J, J, J, J!B, J, J!AA, J, '!&', J, J, J, J, J+, ==I&  J, J, ?!A?, '!BB, J, J, J, J, J, J, J!AA, J, J, J, '!&9, J, J, J, J+, ==I?

    8" # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    13/15

      J, J, J, J, J, J!A, J, J, J, '!&?, J, J, J, '!@A, J, J, J, J, J+, ==I@  J, J, J, J, J, J, J, J, J, J, '!&', J, '!@A, J, J!9@, J!', J, J, J+, ==I9  J, @!'@, J, J, J, J, J, J, J, J, J, '!&9, J, J!9@, J, J, J, J, J+, ==IA  J, J, J, J, J, J, J!@, ?!J&, J, J, J, J, J, J!', J, J, J, J, J+, ==IB  J, J, J, J, J, J, ?!@, J, J!?N, J, J, J, J, J, J, J, J, J!N, J+, ==IN

      J, J, J, J, J, J, J, J!?N, J, J, J, J, J, J, J, J, J!N, J, '!?N+, ==I8  J, N!'@, J, J, J, J, J, J, '!9A, J, J, J, J, J, J, J, J, '!?N, J+, ==I'J

    +#int main$*oid"

    cout EE ati numarul de noduri( #cin n#for$iJ#iEn#iQQ"

    for$6J#6En#6QQ"if$costKiLK6L J"

    costKiLK6L888#+

    +cout EE Muc5iile arborelui cu cost minim sunt( EE endl#G5ile$nr E n" ==nr/ numarul muc5iilor *izitate

    for$i J,minim 888#iEn#iQQ"

    for$6'#6 E n#6QQ"

    if$costKiLK6L E minim"

    minimcostKiLK6L#aui# b*6#+++

      ufind$u"#*find$*"#if$uni$u,*""

    cout EE nrQQ EE muc5ie $ EE a EE , EE b EE " EE minim EEendl#

    costmin Q minim#+costKaLKbLcostKbLKaL888# == facem pe a, b *erificati

    +

    8& # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    14/15

    cout EE Costul minim este ( EE costmin#return J#

    +int find$int i"

    G5ile$*izitKiL"i*izitKiL#return i#

    +int uni$int i,int 6"

    if$iR6"

    *izitK6Li#return '#

    +

    return J#+

    Re.ultatul*

    -raful costului minim este(

    8' # $ a % e

  • 8/19/2019 Algoritmii Grafurilor Lab2-3 MV

    15/15

    'oncluzie

    1n urma acestei lucrări de laborator am ob inut următoarele competen e(ț ț'" %m fost familiarizat cu defini ii i no iuni pri*ind colorarea grafului i algoritmul luiț ș ț ș

    YrusXal! Ca( colorare corectă, X/colorare, număr cromatic, pădure, arbore costului minim!&" %m studiat algoritmul de găsire a costului minim! %lgoritmul lui YrusXal!?" %m elaborat programul în CQQ de colorare a grafului prin intermediul parcurgerii ZF3! iȘ

    am elaborat programul în CQQ de găsirea arborelui cu cost minim!@" %m implementat o problemă economică reală, i am demonstrat, că defapt practic oriceș

     problemă din lumea reală, poate fi redusă la studierea grafurilor!

    Cu siguran ă e.perien ele pe care le/am ob inut în lucrările de laborator & i ? îmi *a fiț ț ț ș

    folositoare în cariera mea de programator i de economist!ș

    8( # $ a % e