版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/t46414704152abc/article/details/83998406
1.有向无环图的拓扑排序
// enDegree表示每个顶点的入度,这个数据结构可以从图的结构求出来
// graph是一个二维数组,但是这个数组不是图的邻接矩阵,graph[i][j]表示依赖于i的第j个元素的编号
// 在本文中,i依赖于j表达的意思是,拓扑排序中必须先输出j,然后才能输出i
int topSort(vector<vector<int>>& relayVec, vector<int>& enDegree) {
queue<int> myQueue;
for (int i = 0; i < enDegree.size(); ++i) {
if (enDegree[i] == 0){
myQueue.push(i);
}
}
while(!myQueue.empty()){
int top = myQueue.front();
for(int i = 0;i<relayVec[top].size();++i){ // 所有依赖于编号为top的元素的入度减小1,如果减小后刚好为0,入队
if(--enDegree(relayVec[top][i])==0)
myQueue.push(relayVec[top][i]);
}
}