用kahn算法实现拓扑排序。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285
代码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
vector<int> arr[505];
priority_queue<int,vector<int>, greater<int> > q;
int in[505],ans[505];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(in,0,sizeof(in));
for(int i = 0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
arr[a].push_back(b);
in[b]++;
}
for(int i = 1;i<=n;i++)
{
if(in[i]==0)
q.push(i);
}
int cnt = 0;
while(!q.empty())
{
int now = q.top();
ans[cnt++] = now;
q.pop();
while(arr[now].size()>0)
{
int v = arr[now].back();
arr[now].pop_back();
in[v]--;
if(in[v]==0)
q.push(v);
}
}
int flag = 0;
for(int i = 1;i<=n;i++)
{
if(arr[i].size()>0)
{
flag = 1;
}
arr[i].clear();
}
if(flag)
printf("Error\n");
else
{
for(int i = 0;i<cnt;i++)
{
if(i!=cnt-1)
printf("%d ",ans[i]);
else
printf("%d\n",ans[i]);
}
}
}
return 0;
}
本文介绍了一种使用Kahn算法实现拓扑排序的方法,并通过一个具体的代码示例进行了展示。该示例代码实现了从输入中读取依赖关系,并通过优先队列处理这些关系以得到一个有效的拓扑排序。
387

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



