解释
对于一个有向无环图(Directed Acyclic Graph)G进行拓扑排序,就是将G中所有顶点排成一个线性序列,使得图中任意一个对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
实现代码
queue<int>q;
//priority_queue<int,vector<int>,greater<int>>q;
//优先队列的话,会按照数值大小有顺序的输出
//此处为了理解,暂时就用简单队列
int topo(){
for(inti=1;i<=n;i++){
if(indegree[i]==0){
q.push(i);
}
}
int temp;
while(!q.empty()){
temp=q.front();//如果是优先队列,这里可以是top()
printf("%d->",temp);
q.pop();
for(inti=1;i<=n;i++){
//遍历从temp出发的每一条边,入度--
if(map[temp][i]){
indegree[i]--;
if(indegree[i]==0)
q.push(i);
}
}
}
}