您的位置:首页 > 其它

邻接表拓扑排序,保证从小到大输出(未测试)

2016-06-27 16:53 274 查看
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int N=100009;
int head
,tot,pre
,edge
,n,m,b
,cnt
,a
;
void add(int x,int y)
{
edge[++tot]=y;pre[tot]=head[x];head[x]=tot;
}
int main()
{
scanf("%d%d",&n,&m);
int x,y;
while (m--)
{
scanf("%d%d",&x,&y);
cnt[y]++;
add(x,y);
}
priority_queue<int,vector<int>,greater<int> > q;
for (int i=1;i<=n;i++) if (cnt[i]==0) q.push(i);
int z=0;
while (!q.empty())
{
int u=q.top();
q.pop();
a[u]=++z;
for (int i=head[u];i;i=pre[i])
{
int v=edge[i];
cnt[v]--;
if (cnt[v]==0) q.push(v);
}
}
for (int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: