您的位置:首页 > 其它

拓扑排序模版--hdu 1285 确定比赛名次

2013-02-26 10:52 232 查看
#include <stdio.h>
#include <string.h>
int count,n,degree[505],map[505][505],vis[505],res[505];

void topo(int x)
{
res[count] = x;
count++;
int i;
for(i = 1;i <= n;i++)
{
if(map[x][i] && !vis[i])
degree[i]--;
}
}

int main()
{
int a,b,m,i;
while(~scanf("%d %d",&n,&m))
{
memset(map,0,sizeof(map));
memset(degree,0,sizeof(degree));
memset(vis,0,sizeof(vis));
for(i = 0;i < m;i++)
{
scanf("%d %d",&a,&b);
if(map[a][b] == 0)
{
map[a][b] = 1;
degree[b]++;
}
}
count = 0;
while(count < n)
{
for(i = 1;i <= n;i++)
{
if(!vis[i] && !degree[i])
{
topo(i);
vis[i] = 1;
break;
}
}
}
for(i = 0;i < n-1;i++)
printf("%d ",res[i]);
printf("%d\n",res[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: