图片转自https://blog.csdn.net/qq_41713256/article/details/80805338
拓扑排序针对有向无环图
不断地排除没有入度的节点。
一个简单的实现:
while(1){
for(int i = 1; i <= v; i++){
if(ID[i] == 0){
cout << i << " "; //输出顶点
count++;
//2、从图中删除该顶点和所有以它为尾的弧,即删除所有与它有关的边。
ID[i] = -1; //将此顶点入度设为-1,表示删除
for(int j = 1; j <= v; j++){
if(map[i][j] == 1){ //如果顶点j与顶点i有边,则删除这条边,并且顶点j的入度-1
ID[j]--;
}
}
}
}
//3、重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止。
if(count == v){
break; //若count == 顶点数,表示所有顶点的入度都为-1,即所有的边均已输出,停止操作。
}