- Pentru citirea datelor din fisier in coada (ce a fost initializata cu
init_queue()):- se apeleaza
read_file_to_queue()in care se sare peste primul rand din fisierul deschis si valorile de pe fiecare linie sunt citite curead_line(); - experienta si varsta pot deja fi puse in variabila
participant, insa numele si statutul social sunt copiate in doua string-uri pentru formatarea corecta (se folosestemodify_name()), respectiv aflarea valorii corespunzatoare din enum (find_status()); - dupa ce variabila
participantcontine toate valorile corecte de pe o linie, acestea sunt puse in coada prinenqueue();
- se apeleaza
- Pentru scrierea datelor din coada in noul fisier
./Pas_1/test_1.csv, se apeleazawrite_queue_to_file(), prin intermediul careia se apeleazaprint_queue()(nu s-a folositdequeue()pentru ca valorile trebuie pastrate in coada).
- Pentru organizarea candidatilor s-au folosit 2 BST-uri:
- BST pentru lorzi, cu root-ul
root_lord; - BST pentru aventurieri si cavaleri, cu root-ul
root_rest(rest semnificand restul participantilor);
- BST pentru lorzi, cu root-ul
- Din coada s-au extras pe rand lorzii, aventurierii si cavalerii folosind functia
insert()(atata timp cat mai exista noduri in coada) care cauta locul potrivit unde trebuie pus fiecare participant pentru mentinerea proprietatii de BST, iar la final creeaza un nou nod pentru BST folosindnew_node()(care copiaza si la final sterge nodul din coada folosinddelete_node()); - Apoi, folosind
write_bst_to_file(), sunt scrise datele participantilor in cele 2 fisiere dorite (./Pas_2/test_2_lorzi.csv, respectiv./Pas_2/test_2_cavaleri_aventurieri.csv), in mod organizat in functie de statut si experienta.
- Pentru eliminarea participantilor care se gasesc in fisierul cu contestatii:
- initial procesul este similar cu cel de la pasul 1 (citirea fiecarei linii din fisier);
- folosind functia
delete_node_bst()si datele din variabilaparticipant, sunt sterse din BST-ul lorzilor nodurile, gasind participantii de sters in functie de experienta; - functia de stergere asigura ca se mentine proprietatea de BST;
- Participantii ramasi sunt scrisi in fisierul
./Pas_3/test_3_lorzi.csv.
- Pentru realizarea acestui pas, a fost realizat
struct assigned, numit siAssigned_participantpentru participantii care vor lua parte la vanatoare. Astfel, pe langa datele participantului, sunt retinute: padurile prin care acesta va trece, numarul de paduri, cat si numarul traseului; - Se creeaza heap-ul folosind
create_heap(); - Se apeleaza
populate_heap()care:- foloseste o variabila
competitorin care se vor pregati datele ce trebuie dupa puse in heap (similar cu procesul de la pasul 1); - pentru ca traseele sunt puse in ordine, doar trebuie incrementat numarul traseului;
- se citeste cu
read_track_file()linia curenta din fisier cu trasee pentru a se afla prin ce paduri va trebui competitorul sa treaca; - se cauta in cele 2 BST-uri (mai intai in BST-ul lorzilor), folosind
max_value_node_bst()participantul cu experienta cea mai mare (cel aflat in nodul cel mai din dreapta al arborelui) si sunt copiate datele incompetitorcucopy_to_competitor(); - pentru ca datele au fost copiate, se poate sterge nodul din BST prin
delete_node_bst(); - se insereaza datele in heap folosind
insert_to_heap(), care asigura ca acestea sunt puse pe pozitia corecta; - se repeta procesul pana cand in heap se afla cei 8 competitori cu cea mai mare experienta;
- foloseste o variabila
- In fisierul
./Pas_4/test_4.csvsunt scrise numarul traseului, numele si experienta competitorilor in ordinea in care apar in heap.
- Este actualizata experienta fiecarui competitor cu
update_experience(); - Se actualizeaza ordinea in care competitorii sunt pusi in heap folosind
update_order_heap()siheapify_up(), pornind de la primul competitor; - Competitorii sunt din nou scrisi in fisierul
./Pas_5/test_5.csv, dar in ordinea actualizata.
write_awards_to_file()scrie in fisier cei 3 competitori care au acum cea mai mare experienta;- De fiecare data functia il va scrie in fisierul
./Pas_6/test_6.csvpe competitorul de pe prima pozitie, iar dupa este extras din heap pentru a afla noul competitor cu cea mai mare experienta folosindheapify_down().
- Impreuna cu
drumuri.csv, functiacreate_graph()creeaza o lista de adiacenta prin care se vor determina traseele urmate de competitori la pasurile anterioare; - Sunt creati doi vectori,
null_in_vsinull_out_vpentru a memora care sunt varfurile care au grad de intrare 0, respectiv care au grad de iesire 0; - Varfurile cu aceste proprietati sunt aflate folosind
find_null_in_degree_vertices(), respectivfind_null_out_degree_vertices(); - Traseele sunt aflate folosind
find_path():- se initializeaza variabilele necesare cu
init_find_path(); - cu ajutorul celor 2 vectori, cand incepem
Depth First Search, stim de la ce varfuri sa incepem si la care sa ajungem; - cu
DFS_scan()ajungem sa memoram fiecare traseu si dimensiunea acestuia;
- se initializeaza variabilele necesare cu
- Traseele nu se afla in ordine lexicografica, asadar apelam
sort_tracks()si va compara numarul padurilor de pe fiecare traseu folosind bubble sort; - La final, traseele sunt gata sa fie scrise in fisierul
./Pas_7/test_7.csv.