C++实现拓扑排序算法(附完整源码)
拓扑排序是图论中一种重要的算法,它可以对有向无环图进行排序,使得每个顶点的前驱结点都排在该结点的前面。拓扑排序在许多场景中非常有用,比如任务调度、编译器等。
下面是使用C++实现拓扑排序的完整源代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 1e5 + 10;
int n, m; // n为总结点数,m为总边数
int outDegree[MAXN]; // 维护每个结点的出度
vector<int> nextEdge[MAXN]; // nextEdge[i]存储i结点的后继结点
void topologicalSort() {
queue<int> q;
for (int i = 1; i <= n; i++) {
if (outDegree[i] == 0) { // 如果当前结点的出度为0,入队
q.push(i);
}
}
while (!q.empty()) {
int cur = q.front(); // 取出队首结点
q.pop();
cout << cur << " "; // 输出当前结点
for (int i = 0; i < nextEdge[cur].size(); i++) {