我知道常见的拓扑排序方法是使用DFS和递归。但是如果使用stack<int>
而不是递归,你该如何做呢?我需要获取反向后序,但现在有些困惑:
图是一个vector<vector<int>>
邻接表
以下是我想用于拓扑排序的DFS:
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);
}
}
}
}
vector<vector<int> > graph { {1, 2, 3}, {3}, {1, 3}, {}};
,那么你将得到访问顺序3, 1, 2, 1, 0
=>1
被访问了两次,但实际上只应该访问一次。 - Martin Perryvisited
。现在已经修复了。 - Sergey Kalinichenko