Witam,
Potrzebuję iteracyjni gdyż przy rekurencyjnym otrzymuję Stack Overflow.
Wierzchołków jest milion - pewnie dlatego. Więc postanowiłem że przesiądę się na iteracyjne, ale tu są pewne schody. Będę potrzebował czasy przetworzenia wierzchołków - czyli te POST (funkcja f). Nawet nie tyle co czasy a ich kolejność przetwarzania. Dodam, że graf jest skierowany i nie koniecznie jest spójny, tzn może być parę podgrafów. Sam uskrobałem coś takiego i nie wiem czy jest to ok, więc Was proszę o pomoc.
stack <int> S;
void DFS(int u,vector<int>*T){
int v;
S.push(u);
while(!S.empty()){
v = S.top();
marked[v]=true;
POST.push_back(v);
S.pop();
EACH(i, T[v]) // dla kazdego sasiada
if(!marked[*i])
S.push(*i);
}
}
void START_DFS(vector<int> *T){
for(int i = 1; i<=n; ++i) {// n jest globaln
if(!marked[i])
DFS(i);
}
Czy kolejnośc wektora POST będzie prawidłowa?