This is an old revision of the document!
În continuare vom menționa câteva convenții/sfaturi/reguli pe care trebuie să le aveți în vedere pentru restul semestrului. Unele precizări sunt specifice laboratoarelor de grafuri, altele sunt generale.
$n$ = număr de noduri
$m$ = număr de muchii/arce (în funcție de tipul grafului)
$adj[node]$ = lista de adiacență a nodului node
$adj\_trans[node]$ = lista de adiacență a nodului node în graful transpus
În general când vorbim de muchii/arce, putem folosi următoarele notații:
- în grafuri fără costuri pe muchii:
[TODO - delete me]* $(u, v)$ - muchie/arc de la nodul u la v. Notația din pseudocodul de pe ocw.
- în grafuri cu costuri pe muchii:
Recomandam varianta cu vector/ArrayList.
Precizări:
Exemplu de problemă gravă: [C++]: void f() { int v[n]; } (alocare de dimensiune variabila pe stiva), poate crăpa stiva! (n poate fi mare). Interzicem folosirea acestui tip de alocare la PA. Pentru acest exemplu, scheletul va genera și o eroare de compilare, pentru a vă atrage atenția că NU ar trebui să folosiți acest tip de alocare, dacă n poate să fie mare! (grafuri mari)
Observatie: Precizarile mentionate sunt valabile doar pentru contextul PA, unde facem algoritmi eficienti si care dorim sa mearga pe dimensiuni cat mai mari! Asta nu inseamna ca in alte contexte (ex. multi-threaded) nu poti folosi VLA (variable length array on stack).
Scopul acestui paragraf este să va atragă atenția asupra alocării corespunzătoare a datelor la PA , astfel încât să evitați erori de run time pe care să nu vi le puteți explica.