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++) {
本文介绍了C++实现拓扑排序算法的详细过程,该算法适用于有向无环图,常用于任务调度和编译器等领域。提供完整源码,解析了算法思路,采用贪心策略,每次选择入度为0的结点进行遍历,时间复杂度为O(m+n)。
订阅专栏 解锁全文

548

被折叠的 条评论
为什么被折叠?



