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.2cto.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); } } }