您的位置:首页 > 其它

HDU 1285 确定比赛名次

2010-02-24 22:22 197 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1285

解题思路:赤裸裸的拓扑排序啊,数据结构书讲的很清楚算法了。

#include <stdio.h>

int main()
{
int team[501];/*记录各点入度*/
int child[501][501];/*记录以a为起点的与之相连构成线的所有点*/
int len[501];
int a,b,N,M,i,count,min;
while (scanf("%d%d",&N,&M)!=EOF)
{
count = 0;
/*初始化*/
for(i=1;i<=N;i++)
{
team[i] = 0;
len[i] = 0;
}
/*读入边信息*/
while (M--)
{
scanf("%d%d",&a,&b);
team[b]++;/*更新b点入度值*/
child[a][len[a]++] = b;
}
while (count!=N)
{
if(count)
printf(" ");
min = 501;
for(i=1;i<=N;i++)
{
if(team[i] == 0&&i<min)/*寻找入度为0,并且编号小的点*/
min = i;
}
team[min] = 505;/*标记该点,不再访问*/
for(i=0;i<len[min];i++)
team[child[min][i]]--;/*与min有关的点的入度通通-1*/
printf("%d",min);
count++;
}
printf("/n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: