拓扑排序可以用于有向无环图的判断
下面是我自己比较习惯的写法。
(TIP:如果题目条件中有说,当有多个事件可以进行时,可以使用优先队列
优先进行序号大的:那么就可以把queue<int> q 换为 priority_queque<int> q;
优先进行序号小的:
那么就可以把queue<int> q 换为 priority_queue< int,vector<int>,greater<int> > q
即可直接实现)
//顶点数为N
struct node{
int inD;
vector<int> next;
}Node[N];
//在主函数中存储好结点间关系
bool tpsort(){
int num=0;
queque<int> q;
for(int i=0;i<n;i++){
if(Node[i].inD==0) p.push(i);
}
while(!q.empty()){
int top=q.front;
//若要记录拓扑序列,则在这里记录或输出top
p.pop();
for(auto it:Node[top].next){
Node[it].inD--;
if(Node[it].inD==0) p.push(it);
}
// Node[top].next.clear(); 题目没要求就不写
num++;
}
if(num==N){
return true;
}else{
return false;
}
}