Sortowanie topologiczne przy użyciu DFS bez rekursji
Wiem, że powszechnym sposobem na sortowanie topologiczne jest użycie DFS z rekurencją. Ale jak byś to zrobił używającstack<int>
zamiast rekurencji? Muszę uzyskać odwrócony post-order, ale utknąłem trochę:
Wykres jest avector<vector<int> >
lista sąsiedztwa
Poniżej znajduje się DFS, którego chcę użyć do sortowania topologicznego
bool visited[MAX]={0};
stack<int> dfs, postOrder;
vector<int> newVec;
vector<int>::iterator it;
for(int i=0;i<MAX;i++){
if(visited[i]==false){
dfs.push(i);
}
while(!dfs.empty()){
int node=dfs.top();
dfs.pop();
visited[node]=true;
newVec=graph[node]; //vector of neighboors
for(it=newVec.begin();it!=newVec.end();it++){
int son=*it;
if(visited[son]==false){
dfs.push(son);
}
}
}
}