拓扑排序,不需要用栈,边输入边处理
对于给出的序列,输入顶点a时,a的入度必须已经为0,否则不为拓扑
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
const int e=1005;
vector<int> v[e];
stack<int> s;
int in[e];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
v[a].push_back(b);
in[b]++;
}
int k;
cin>>k;
int s[e];
int cnt[e],index=0;
for(int i=0;i<k;i++){
for(int ii=1;ii<=n;ii++)
s[ii]=in[ii];
int judge=0;
for(int j=1;j<=n;j++){
int a;
cin>>a;
if(s[a]){
judge=1;
}
for(int l=0;l<v[a].size();l++){
if(s[v[a][l]])
s[v[a][l]]--;
}
}
if(judge){
cnt[++index]=i;
}
}
for(int i=1;i<index;i++)
cout<<cnt[i]<<" ";
cout<<cnt[index];
return 0;
}