用c++实现图的拓扑排序
时间: 2023-07-27 11:13:57 浏览: 110
好的,下面是实现图的拓扑排序的C++代码:
```cpp
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int MAXN = 100010;
vector<int> graph[MAXN]; //邻接表存储图
int inDegree[MAXN]; //每个节点的入度
void topologicalSort(int n) {
queue<int> q; //存储入度为0的节点
for(int i = 1; i <= n; i++) {
if(inDegree[i] == 0) {
q.push(i);
}
}
while(!q.empty()) {
int u = q.front();
q.pop();
cout << u << " "; //输出拓扑序列中的节点
for(int i = 0; i < graph[u].size(); i++) {
int v = graph[u][i];
inDegree[v]--; //将u的后继节点的入度减1
if(inDegree[v] == 0) {
q.push(v); //将入度为0的节点加入队列
}
}
}
}
int main() {
int n, m; //n为节点个数,m为边的个数
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int u, v; //u为起点,v为终点
cin >> u >> v;
graph[u].push_back(v); //将v加入u的后继节点中
inDegree[v]++; //将v的入度加1
}
topologicalSort(n);
return 0;
}
```
该算法的时间复杂度为$O(n+m)$,其中$n$为节点个数,$m$为边的个数。
阅读全文