const int MAXN = 10000;
vector<int> G[MAXN];
int n, m, inGegree[MAXN];
bool topologicalSort() {
int num = 0; //记录加入到拓扑序列的顶点数
queue<int> q;
for(int i=0; i<n; i++) {
if(inGegree[i] == 0) {
q.push(i); //将所有入度为零的节点入队
}
}
while(!q.empty()) {
int u = q.front();
printf("%d ",u);
q.pop();
for(int i=0; i<G[u].size(); i++) {
int v = G[u][i];
inGegree[v]--;
if(inGegree[v] == 0) {
q.push(v);
}
}
//G[u].clear(); //清空顶点u的所有出边
num++;
}
if(num == n) return true;
else return false;
}
拓扑排序
最新推荐文章于 2024-03-27 13:54:30 发布