Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:laboratoare:laborator-08 [2015/04/19 22:49]
cosmin_ioan.petrisor [Parcurgerea în adâncime]
sd-ca:laboratoare:laborator-08 [2015/05/09 22:42] (current)
cosmin_ioan.petrisor [Obiective]
Line 4: Line 4:
   * [[petrisor_cosmin_ioan@yahoo.com|Cosmin Petrişor]]   * [[petrisor_cosmin_ioan@yahoo.com|Cosmin Petrişor]]
 ===== Obiective ===== ===== Obiective =====
-În urma parcurgerii acestui laborator, studentul va fi capabil:+În urma parcurgerii acestui laborator, studentul va fi capabil ​:
  
-  * să înțeleagă operațiile de parcurgere a grafurilor și diferențele dintre ele. +  * înțeleagă operațiile de parcurgere a grafurilor și diferențele dintre ele. 
-  * să implementeze parcurgerile pe grafuri având la dispoziție structurile de date studiate. +  * implementeze parcurgerile pe grafuri având la dispoziție structurile de date studiate. 
-  * să evalueze complexitatea parcurgerii grafurilor. +  * evalueze complexitatea parcurgerii grafurilor. 
-  * să găsească soluțiile unor probleme folosind algoritmii de parcurgere+  * găsească soluțiile unor probleme folosind algoritmii de parcurgere
  
 ===== Ce este un graf ===== ===== Ce este un graf =====
Line 147: Line 147:
  
 Un exemplu de aplicare al DFS este următorul: Un exemplu de aplicare al DFS este următorul:
 +
 {{sd-ca:​laboratoare:​df1.jpg}} {{sd-ca:​laboratoare:​df1.jpg}}
  
Line 152: Line 153:
  
 Arborele obținut în urma parcurgerii este următorul: Arborele obținut în urma parcurgerii este următorul:
 +
 {{sd-ca:​laboratoare:​df2.jpg}} {{sd-ca:​laboratoare:​df2.jpg}}
  
Line 293: Line 295:
    ​std::​copy(v.begin(),​ v.end(), out_it);    ​std::​copy(v.begin(),​ v.end(), out_it);
 </​code>​ </​code>​
- 
- 
-2.**[4p]** Se numește graf bipartit un graf ''​G = (V, E)''​ în care mulțimea nodurilor poate fi împărțită în două mulțimi disjuncte ''​A''​ și ''​B''​ astfel încât ''​V = A U B''​ şi ''​E este inclus în A x B''​ (orice muchie leagă un nod din ''​A''​ cu un nod din ''​B''​). 
- 
-{{sd-ca:​laboratoare:​bipartit.jpg}} ​ 
- 
-Folosind codul de la problema 1, determinaţi dacă un graf este bipartit. 
- 
-  * Pentru a determina dacă un graf este bipartit sau nu, una din metode constă în efectuarea de parcurgeri ''​BFS''​ și atribuirea de etichete nodurilor conform cu paritatea nivelului acestora în parcurgere (''​A''​ pentru nodurile de pe nivel par, ''​B''​ pentru nodurile de pe nivel impar). Atunci când se adaugă vecinii nevizitați ai unui nod în coadă, se vor verifica de asemenea etichetele vecinilor deja vizitați: dacă se descoperă că unul din aceștia are aceeași etichetă ca cea atribuită nodului curent, graful are o muchie între noduri de pe același nivel și deci nu poate fi bipartit. În caz contrar (s-a realizat parcurgerea ''​BFS''​ fără a apărea această situație), graful este bipartit și nodurile sunt etichetate cu mulțimea din care fac parte. 
-  * În scheletul de cod, secţiunea aferentă acestei probleme este marcată cu **TODO2.1**. 
  
 <​hidden>​ <​hidden>​
-3. **[4p]** Considerăm ca fişierul de intrare al primei probleme, reprezintă ''​N''​ cursuri ale unei programe analitice, între care există ''​M''​ condiționări de forma ''​A-B'',​ cu semnificația ''​cursul A trebuie să preceadă cursul B''​. În acest caz graful este //​orientat//​. Fiind date regulile de precendență (aflate în fișierul ''​graf.in''​),​ propuneți o ordonare coerentă de studiere a materiilor. +2.**[4p]** Se dă un labirint, specificat prin intermediul unei matrice ''​M x N''​. Unele dintre celulele acestei matrice sunt libere (se poate trece), în timp ce altele conțin câte un # (reprezentând un obstacol). Labirintul este complet închis (nu există intrări și ieșiri). Într-o poziţie a labirintului există un roboțel, care se poate mișca într-una din cele patru direcții: stânga, dreapta, sus, jos (nu poate merge pe diagonală). Afişaţi **distanţele minime** de la poziţia iniţială a robotului la restul celulelor. Datele se vor citi dintr-un fișier cu următorul format.
-  * Structura codului ce trebuie implementată este marcată cu secțiunea **TODO3.1**. +
-  * Cursul 0 reprezintă **singurul** curs de bază, fără de care nici un alt curs nu se poate desfășura. +
- +
- +
-4.**[4p]** Se dă un labirint, specificat prin intermediul unei matrice ''​M x N''​. Unele dintre celulele acestei matrice sunt libere (se poate trece), în timp ce altele conțin câte un # (reprezentând un obstacol). Labirintul este complet închis (nu există intrări și ieșiri). Într-o poziţie a labirintului există un roboțel, care se poate mișca într-una din cele patru direcții: stânga, dreapta, sus, jos (nu poate merge pe diagonală). Afişaţi **distanţele minime** de la poziţia iniţială a robotului la restul celulelor. Datele se vor citi dintr-un fișier cu următorul format.+
   * pe prima linie: numărul de linii ''​M''​ și de coloane ''​N''​ din labirint   * pe prima linie: numărul de linii ''​M''​ și de coloane ''​N''​ din labirint
   * pe următoarele ''​M''​ linii: câte ''​N''​ caractere reprezentând conținutul celulei: '​.'​ pentru spațiu liber, '#'​ pentru perete   * pe următoarele ''​M''​ linii: câte ''​N''​ caractere reprezentând conținutul celulei: '​.'​ pentru spațiu liber, '#'​ pentru perete
Line 342: Line 329:
     * pereche.second - accesează al doilea element al perechii     * pereche.second - accesează al doilea element al perechii
  
 +3. **[4p]** Considerăm ca fişierul de intrare al primei probleme, reprezintă ''​N''​ cursuri ale unei programe analitice, între care există ''​M''​ condiționări de forma ''​A-B'',​ cu semnificația ''​cursul A trebuie să preceadă cursul B''​. În acest caz graful este //​orientat//​. Fiind date regulile de precendență (aflate în fișierul ''​graf.in''​),​ propuneți o ordonare coerentă de studiere a materiilor.
 +  * Structura codului ce trebuie implementată este marcată cu secțiunea **TODO3.1**.
 +  * Cursul 0 reprezintă **singurul** curs de bază, fără de care nici un alt curs nu se poate desfășura.
 +
 +4.**[4p]** Se numește graf bipartit un graf ''​G = (V, E)''​ în care mulțimea nodurilor poate fi împărțită în două mulțimi disjuncte ''​A''​ și ''​B''​ astfel încât ''​V = A U B''​ şi ''​E este inclus în A x B''​ (orice muchie leagă un nod din ''​A''​ cu un nod din ''​B''​).
 +
 +{{sd-ca:​laboratoare:​bipartit.jpg}} ​
 +
 +Folosind codul de la problema 1, determinaţi dacă un graf este bipartit.
 +
 +  * Pentru a determina dacă un graf este bipartit sau nu, una din metode constă în efectuarea de parcurgeri ''​BFS''​ și atribuirea de etichete nodurilor conform cu paritatea nivelului acestora în parcurgere (''​A''​ pentru nodurile de pe nivel par, ''​B''​ pentru nodurile de pe nivel impar). Atunci când se adaugă vecinii nevizitați ai unui nod în coadă, se vor verifica de asemenea etichetele vecinilor deja vizitați: dacă se descoperă că unul din aceștia are aceeași etichetă ca cea atribuită nodului curent, graful are o muchie între noduri de pe același nivel și deci nu poate fi bipartit. În caz contrar (s-a realizat parcurgerea ''​BFS''​ fără a apărea această situație), graful este bipartit și nodurile sunt etichetate cu mulțimea din care fac parte.
 +  * În scheletul de cod, secţiunea aferentă acestei probleme este marcată cu **TODO2.1**.
 </​hidden>​ </​hidden>​
 ===== Interviu ===== ===== Interviu =====
sd-ca/laboratoare/laborator-08.1429472973.txt.gz · Last modified: 2015/04/19 22:49 by cosmin_ioan.petrisor
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0