您的位置:首页 > 其它

hdu 1285

2013-08-31 17:32 162 查看
第一个图论题,拓扑排序;

挺容易的,基本上就是一个裸地拓扑排序;

代码:

#include<cstdio>
#include<cstring>
using namespace std;
int a[505][505],ans[505],cnt[505],n,m,x,y;

void top_sort()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(a[i][j]==1)
cnt[j]++;
for(int i=1; i<=n; i++)
{
int k=1;
while(cnt[k]!=0) k++;
ans[i]=k;
cnt[k]--;
for(int j=1; j<=n; j++)
if(a[k][j])
cnt[j]--;
}
}

int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(cnt,0,sizeof cnt);
memset(a,0,sizeof a);
memset(ans,0,sizeof ans);
for(int i=0; i<m; i++)
{
scanf("%d%d",&x,&y);
a[x][y]=1;
}
top_sort();
for(int i=1; i<n; i++)
printf("%d ",ans[i]);
printf("%d\n",ans
);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: