我最初使用递归解决了拓扑排序问题:
void dfs(int v, bool visited[], node* adjList[], std::stack<int> &myStack) {
visited[v] = true;
node* curr = adjList[v];
while (curr != NULL) {
if(!visited[curr->val]) {
dfs(curr->val, visited, adjList, myStack);
}
curr = curr->next;
}
myStack.push(v);
}
看起来对我的目的很有效。但是我在将其转化为迭代解决方案时遇到了问题。以下是我的尝试:
void dfs(int v, bool visited[], node* adjList[], std::stack<int> &myStack) {
std::stack<int> recursion;
visited[v] = true;
recursion.push(v);
while( !recursion.empty() ) {
v = recursion.top();
recursion.pop();
node* curr = adjList[v];
myStack.push(v);
while (curr != NULL) {
if(!visited[curr->val]) {
visited[curr->val] = true;
recursion.push(curr->val);
}
curr = curr->next;
}
}
}
但是排序完全混乱了!我认为这可能是由于我的myStack.push(v)
的位置,但我不知道如何解决。任何帮助将不胜感激。