http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=380#problem/A
很简单的拓扑排序,师姐讲解的时候也很easy,也很容易就听懂了,但代码实现的时候却有点小纠结!

#include
#include
int a[505][505];
int id[505];
int main ()
{
int i,j,n,m,x,y,tm,t,top;
while (scanf(“%d %d”,&n,&m)!=EOF)
{
memset(a,0,sizeof(a)); //函数清零
memset(id,0,sizeof(id));
while (m–)
{
scanf(“%d %d”,&x,&y);
if (!a[x][y]) //判断重边
{
a[x][y]=1;
id[y]++;
}
for (i=n;i>0;i–) // 找出编号最小的
if (!id[i]) top=i;
}
t=1;
while (t0;i–)
{
if (a[top][i])
id[i]–;
if (!id[i])
tm=i;
}
top=tm;
}
printf (“%d\n”,top);
}
return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation