#include<bits/stdc++.h>
using namespace std;
int num[505],map1[505][505],topo[505],n,m;
void toposort()
{
for(int i=1;i<=n;i++)
{
int k=1;
while(num[k]!=0) k++;
topo[i]=k;
for(int j=1;j<=n;j++)
{
if(map1[k][j])
{
num[j]--;
}
}
num[k]=-1;
}
}
int main()
{
int x,y;
while(cin>>n>>m)
{
memset(num,0,sizeof(num));
memset(map1,0,sizeof(map1));
memset(topo,0,sizeof(topo));
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(!map1[x][y])
{
map1[x][y]=1;
num[y]++;
}
}
toposort();
for(int i=1;i<=n-1;i++)
cout<<topo[i]<<' ';
cout<<topo[n]<<endl;
}
return 0;
}
HDU 1285 确定比赛名次(拓扑排序)
最新推荐文章于 2022-03-29 17:09:40 发布
本文介绍了一种基于C++实现的图的拓扑排序算法。该算法通过记录每个顶点的入度来完成排序,并使用邻接矩阵来表示图。通过对每一轮找到的入度为0的顶点进行减边操作,最终实现对所有顶点的排序。

216

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



