This shows you the differences between two versions of the page.
sd-ca:laboratoare:lab-07 [2022/04/05 15:29] radu_stefan.minea [Exerciții] |
sd-ca:laboratoare:lab-07 [2024/04/15 21:30] (current) melih.riza [Exerciții] |
||
---|---|---|---|
Line 2: | Line 2: | ||
Responsabili | Responsabili | ||
- | * [[mailto:mitapirvuet@gmail.com|Mihai Pirvulet]] | + | * [[stef.dascalu@gmail.com|Ștefan-Teodor Dascălu]] |
- | * [[mailto:radustefanminea@gmail.com|Radu Minea]] | + | * [[melih.riza03@gmail.com|Melih Riza]] |
===== Obiective ===== | ===== Obiective ===== | ||
Line 360: | Line 360: | ||
===== Schelet ===== | ===== Schelet ===== | ||
- | {{:sd-ca:laboratoare:lab_7:lab07_graphs_2.zip|}} | ||
- | ===== Exerciții ===== | ||
- | |||
<note important> | <note important> | ||
- | Pentru a rezolva laboratorul folosind Github Classroom, urmați [[sd-ca:laboratoare/tutorial-github-classroom#adaugarea_solutiei_unui_laborator|acești pași]]. Asigurați-vă ca ați creat branchul pentru acest laborator **din branchul ''master''** al repository-ului vostru. | + | Daca folositi **Github Classroom**, va rugam sa va actualizati scheletul cu cel de mai jos. Cel din repo-ul clonat initial nu este la cea mai recenta versiune. |
</note> | </note> | ||
+ | |||
+ | {{:sd-ca:laboratoare:lab07_2024.zip|Scheletul de laborator}} | ||
+ | |||
+ | ===== Exerciții ===== | ||
<note> | <note> | ||
- | Fiecare laborator va avea unul sau doua exerciții publice si un pool de subiecte ascunse, din care asistentul poate alege cum se formeaza celelalte puncte ale laboratorului. | + | Trebuie să vă creați cont de [[https://lambdachecker.io | Lambda Checker]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. Aveti grija sa selectati contestul corect la submit, si anume **[[https://beta.lambdachecker.io/contest/34 |SD-CA-LAB-07 Grafuri (Advanced) ]]** |
</note> | </note> | ||
- | <hidden> | + | 1) [**3.5p**] Rezolvați o problemă **aleasă de catre asistent** din cele menționate mai sus care sunt prezente pe LambdaChecker (componente conexe, sortare topologică, drum minim, graf bipartit). |
- | **Observaţie (pentru asistenți):** | + | |
- | În cadrul acestui laborator exerciţiile vor fi făcute vizibile pe parcursul laboratorului, apoi mutate la loc în secţiunea //Indicaţii pentru asistenţi//. | ||
- | Vă rugăm să faceţi public doar strictul necesar şi nu altceva! | + | 2) [**3.5p**] Rezolvați o altă problemă ,**aleasă de voi**, din cele menționate mai sus care sunt prezente pe LambdaChecker (componente conexe, sortare topologică, drum minim, graf bipartit). |
- | **Notă (pentru asistenți):** | ||
- | [**3.5p**] Un exercițiu ales de către asistent pentru toată semigrupa. | + | 3) [**2p bonus**] Implementați Courses II pe LambdaChecker. |
- | [**3.5p**] Al doilea exercițiu este ales de fiecare student în parte, după preferințe. | ||
- | </hidden> | ||
- | 1) [**3.5p**] Într-o rețea de socializare pentru gameri există mai multe clanuri. Doi jucători fac parte din același clan dacă există un drum atât de la X la Y, cât și de la Y la X. Când se creează o nouă legatură între doi jucători, clanurile din care ei fac parte se unesc formând un singur clan. | + | 4) [**Bonus**] Veți primi 1p bonus pentru fiecare problemă rezolvată în plus pe LambdaChecker, sau pe care o trimiteți asistentului din urmatoarele probleme: [[https://leetcode.com/problems/number-of-islands/description/]]; [[https://leetcode.com/problems/number-of-provinces/description/]]. |
- | Se dau n numărul de gameri din rețeaua de socializare si m numărul de legături ce există intre aceștia. În continuare, sunt citite cele m legături. | ||
- | Determinați numărul clanurilor existente în rețea și jucătorii care fac parte din fiecare clan, completând metodele connected_components și dfs_connected_comps din schelet. | + | **Punctajul maxim care se poate obține pe exerciții, incluzând bonusul, este de 12p.** |
- | **Exemplu** | ||
- | <code txt Intrare> | ||
- | 12 10 | ||
- | 0 1 | ||
- | 0 2 | ||
- | 1 2 | ||
- | 2 3 | ||
- | 4 5 | ||
- | 4 6 | ||
- | 5 6 | ||
- | 4 7 | ||
- | 7 8 | ||
- | 9 10 | ||
- | </code> | ||
- | |||
- | <code txt Ieșire> | ||
- | 4 | ||
- | 0 1 2 3 | ||
- | 4 5 6 7 8 | ||
- | 9 10 | ||
- | 11 | ||
- | </code> | ||
- | |||
- | |||
- | 2) [**3.5p**] Un curier, care se află într-un oraș A, trebuie să livreze un pachet într-un oraș B. | ||
- | |||
- | Pe hartă se află ''n'' orașe, conectate prin ''m'' străzi bidirecționale. Se știe faptul că fiecare dintre aceste străzi este parcursă într-un timp constant ''t''. | ||
- | |||
- | Se citesc ''n'', ''m'', cele ''m'' străzi și perechea de orașe ''A'' și ''B''. | ||
- | |||
- | Determinați ruta cea mai scurtă pe care poate ajunge curierul în orașul B, în cazul în care aceasta există, completând metoda min_path din schelet. Dacă nu există nicio rută între orașele A și B, să se afișeze "No path found". | ||
- | |||
- | **Exemplu** | ||
- | |||
- | <code txt Intrare> | ||
- | 7 10 | ||
- | 0 1 | ||
- | 0 4 | ||
- | 1 2 | ||
- | 1 3 | ||
- | 1 4 | ||
- | 2 4 | ||
- | 3 5 | ||
- | 3 6 | ||
- | 4 5 | ||
- | 4 6 | ||
- | 0 6 | ||
- | </code> | ||
- | |||
- | <code txt Ieșire> | ||
- | 0 4 6 | ||
- | </code> | ||
- | |||
- | 3) [**3.5p**] În primii ani de studiu, toți studenții de la Facultatea de Automatică și Calculatoare studiază un număr de N materii obligatorii. Dându-se un set de relații între acestea, cu semnificația că materia din stânga trebuie studiată într-un semestru anterior (nu neapărat din același an), celei din partea dreaptă, găsiti și implementați un algoritm care propune o ordine corectă de studiere a materiilor universitare, care să respecte restricțiile impuse, completând metodele topo_sort și dfs_topo_sort din schelet. | ||
- | |||
- | **Exemplu** | ||
- | |||
- | <code txt Intrare> | ||
- | 6 4 | ||
- | Programarea_Calculatoarelor Structuri_de_Date | ||
- | Structuri_de_Date Programare_Orientata_pe_Obiecte | ||
- | Matematica1 Fizica | ||
- | Matematica2 Fizica | ||
- | </code> | ||
- | |||
- | <code txt Ieșire> | ||
- | Matematica2 | ||
- | Matematica1 | ||
- | Fizica | ||
- | Programarea_Calculatoarelor | ||
- | Structuri_de_Date | ||
- | Programare_Orientata_pe_Obiecte | ||
- | </code> | ||
- | |||
- | |||
- | 4) [**3.5p**] Dându-se ''n'' noduri și ''m'' muchii ale unui graf neorientat, determinați dacă acest graf este bipartit și aflați cele două mulțimi care îl formează, completând metoda check_bipartite din schelet. Dacă graful nu este bipartit, să se afișeze "Graph is not bipartite". | ||
- | |||
- | **Exemplu** | ||
- | |||
- | <code txt Intrare> | ||
- | 9 8 | ||
- | 0 1 | ||
- | 0 6 | ||
- | 1 2 | ||
- | 2 7 | ||
- | 3 6 | ||
- | 4 7 | ||
- | 4 8 | ||
- | 5 8 | ||
- | </code> | ||
- | |||
- | <code txt Ieșire> | ||
- | 0 2 3 4 5 | ||
- | 1 6 7 8 | ||
- | </code> | ||
- | |||
- | 5) [**BONUS**] Un curier trebuie să livreze pachete în ''n'' orașe. Orașele sunt codificate prin numere de la ''0'' la ''n-1''. Se cunosc m străzi bidirecționale, legături între orașe. Se citesc numarul de teste, apoi pentru fiecare test ''n'', ''m'' și cele ''m'' străzi bidirecționale. | ||
- | |||
- | Sediul curieratului se află în orașul ''0''. Determinați toate rutele pe care curierul le poate urma astfel încât acesta să efectueze toate livrările și să se întoarcă la sediu, astfel încât el va trece prin fiecare oras o singură data. | ||
- | |||
- | **Exemplu** | ||
- | |||
- | <code txt Intrare> | ||
- | 5 7 | ||
- | 0 1 | ||
- | 1 2 | ||
- | 0 3 | ||
- | 1 3 | ||
- | 1 4 | ||
- | 2 4 | ||
- | 3 4 | ||
- | </code> | ||
- | |||
- | <code txt Ieșire> | ||
- | 0 1 2 4 3 0 | ||
- | </code> | ||