题目描述
给出一个有向图,判断其是否存在拓扑序列,若存在则输出一个拓扑序列。
输入样例
5 7
1 0
4 3
2 1
2 0
3 2
4 1
4 2
输出样例
4 3 2 1 0
输入样例
5 8
0 3
1 0
4 3
2 1
2 0
3 2
4 1
4 2
输出样例
ERROR
测试代码
#include <vector>
#include <stack>
using namespace std;
int main(){
size_t v, e;
cin >> v >> e;
vector<vector<int> > t(v,vector<int>());
vector<int> d(v,0);
for(size_t i=0;i<e;i++){
int a, b;
cin >> a >> b;
t[a].push_back(b);
d[b]++;
}
stack<int> s;
for(size_t i=0;i<v;i++){
if(!d[i]){
s.push(i);
}
}
vector<int> r;
while(!s.empty()){
int j = s.top();
s.pop();
r.push_back(j);
for(vector<int>::iterator i=t[j].begin();i<t[j].end();i++){
if(--d[*i]==0){
s.push(*i);
}
}
}
if(r.size()!=v){
cout << "ERROR" << endl;
}else{
for(size_t i=0;i<v;i++){
if(i){
cout << ' ';
}
cout << r[i];
}
cout << endl;
}
return 0;
}