This shows you the differences between two versions of the page.
sd-ca:laboratoare:laborator-08 [2015/05/09 16:49] cosmin_ioan.petrisor [Aplicaţii] |
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ă: |
- | * 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 297: | Line 297: | ||
<hidden> | <hidden> | ||
- | 2.**[BONUS]** 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. | + | 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. |
* 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 332: | Line 332: | ||
* Structura codului ce trebuie implementată este marcată cu secțiunea **TODO3.1**. | * 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. | * 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''). | 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''). | ||
Line 342: | Line 341: | ||
* 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. | * 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**. | * În scheletul de cod, secţiunea aferentă acestei probleme este marcată cu **TODO2.1**. | ||
- | |||
- | |||
</hidden> | </hidden> | ||
===== Interviu ===== | ===== Interviu ===== |