#include <iostream>
#include <vector>
#include <queue>
const int MAXN = 105;
int ind[MAXN];
std::vector<int> children[MAXN];
void topo(int n)
{
std::queue<int> q;
for(int i = 1; i <= n; i++)
{
if(ind[i] == 0)
q.push(i);
}
while(!q.empty())
{
int cur = q.front();
printf("%d ", cur);
q.pop();
int childrenCnt = children[cur].size();
for(int i = 0; i < childrenCnt; i++)
{
ind[children[cur][i]]--;
if(ind[children[cur][i]] == 0)
q.push(children[cur][i]);
}
}
}
int main()
{
int n;
int tmp;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
while(1)
{
scanf("%d", &tmp);
if(tmp == 0)
break;
children[i].push_back(tmp);
ind[tmp]++;
}
}
topo(n);
printf("\n");
return 0;
}POJ 2367 Topology
最新推荐文章于 2021-02-19 09:15:37 发布
本文介绍了一种基于图的拓扑排序算法实现方法。通过使用C++编程语言,详细展示了如何利用队列来实现图的拓扑排序,并提供了完整的源代码示例。该算法适用于有向无环图,能够有效地解决任务依赖关系问题。
372

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



