用邻接表实现拓扑排序算法,c++
时间: 2023-09-01 18:07:54 浏览: 108
好的,以下是用邻接表实现拓扑排序算法的C++代码:
```c++
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int MAXN = 10005; // 最大节点数
vector<int> G[MAXN]; // 邻接表存图
int inDegree[MAXN]; // 入度数组
void topologicalSort(int n)
{
queue<int> q;
for(int i=1; i<=n; i++)
if(inDegree[i] == 0) // 将所有入度为0的节点入队
q.push(i);
while(!q.empty())
{
int u = q.front();
q.pop();
cout << u << " "; // 输出拓扑序列中的节点
for(int i=0; i<G[u].size(); i++)
{
int v = G[u][i];
if(--inDegree[v] == 0) // 如果入度为0,则入队
q.push(v);
}
}
}
int main()
{
int n, m;
cin >> n >> m;
for(int i=0; i<m; i++)
{
int u, v;
cin >> u >> v;
G[u].push_back(v); // 添加一条有向边u -> v
inDegree[v]++; // 节点v的入度加1
}
topologicalSort(n); // 进行拓扑排序
return 0;
}
```
以上代码中,`G`是邻接表,`inDegree`是入度数组,`topologicalSort`函数实现了拓扑排序算法,`main`函数中读入了节点数`n`和有向边数`m`,并将所有有向边添加到邻接表中,同时更新每个节点的入度。最后调用`topologicalSort`函数进行拓扑排序。
阅读全文