拓扑排序的简单模拟 都不需要用队列
只需要按照顺序,判断入度是否为0即可(过程中指向点的入度要跟着减少)
#include<iostream>
#include<vector>
using namespace std;
struct node{
int in;
vector<int> cl;
};
int N,M,K;
vector<int> ans;
int main(){
cin>>N>>M;
vector<node> Node(N+1);
for(int i=0;i<M;i++){
int a,b;
scanf("%d %d",&a,&b);
Node[a].cl.push_back(b);
Node[b].in++;
}
cin>>K;
for(int i=0;i<K;i++){
bool flag=true;
vector<node> Node1=Node;
for(int j=0;j<N;j++){
int index;
scanf("%d",&index);
if(Node1[index].in==0){
for(auto it:Node1[index].cl){
Node1[it].in--;
}
}else{
flag=false;
}
}
if(!flag) ans.push_back(i);
}
for(int i=0;i<ans.size();i++){
if(i==0){
printf("%d",ans[i]);
}else{
printf(" %d",ans[i]);
}
}
return 0;
}