Algoritmul de rezolvare este:
a) Pentru aflarea materiilor inutile, se face cate o parcurgere in adancime
(dar poate fi si in latime daca tineti mortis), pornind din fiecare materie
utila, PE GRAFUL INVERSAT, adica dintr-un nod al grafului ne mutam pe rand
in toti predecesorii nodului, nu in succesori. Reunind nodurile atinse
pentru parcurgerile din fiecare materie utila, obtinem multimea de materii
utile (direct sau indirect), pe care o complementam si obtinem multimea de
materii inutile.
b) Pentru a determina toate nodurile care se afla pe un ciclu in graf,
parcurgem graful in modul obisnuit si tinem cont ca ori de cate ori dorim
sa ne mutam dintr-un nod intr-un alt nod in curs de vizitare, se inchide un
ciclu. "Nod in curs de vizitare" este un nod in care s-a ajuns, dar care
are fii inca nevizitati.
Nu va pot spune mult mai mult, deoarece trebuie sa ma duc sa proiectez o
unitate aritmetico-logica. Din pacate nu pentru cei de la Intel, ci pentru
cei de la Poli :) Dar cititi cartile "de capatai" (de teasta, de bostan)
in teoria grafurilor: Cormen, Ioan Tomescu, Sorin Tudor, alte manuale de
clasa a X-a.
Inca nu am ajuns la o concluzie in ce priveste complexitatea. Este
O(M+N) ?
|
|