九度教程第81题
C语言源码:[cpp]
#include<stdio.h>
#include<stdlib.h>
#define maxsize 510
int E[maxsize][maxsize];
int q[maxsize*2];
int indegree[maxsize];
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int m,n,a,b,i,j,num,front,rear;
while(scanf("%d %d",&n,&m)!=EOF)
{ www.zzzyk.com
for(i=0;i<n;i++)
{
indegree[i]=0;
for(j=0;j<n;j++)
E[i][j]=0;
}
while(m>0)
{
m--;
scanf("%d %d",&a,&b);
if(E[a-1][b-1]!=1)
{
E[a-1][b-1]=1;
indegree[b-1]+=1;
}//这个题有个陷阱,假如一个对赢了另一个对好几次呢。。。
}
front=0;
rear=0;
for(i=0;i<n;i++)
{
if(indegree[i]==0)
q[rear++]=i;
}
qsort(q,rear,sizeof(q[0]),cmp);
num=1;
while(front!=rear)
{
i=q[front++];
if(num!=n)
printf("%d ",i+1);
else
{
printf("%d\n",i+1);
break;
}
num++;
for(j=0;j<n;j++)
{
if(E[i][j]!=0)
{
indegree[j]--;
if(indegree[j]==0)
q[rear++]=j;
}
}
qsort(&q[front],rear-front,sizeof(q[front]),cmp);
}
}
}
补充:软件开发 , C++ ,