http://acm.hdu.edu.cn/showproblem.php?pid=1285
1 #include <stdio.h> 2 #include <string.h> 3 const int N=1001; 4 int p[N][N],in[N]; 5 int n,m; 6 void toposort() 7 { 8 for (int i = 1; i <= n; i++) 9 { 10 for (int j = 1; j <= n; j++) 11 { 12 if(in[j]==0) 13 { 14 if(i==1) 15 printf("%d",j); 16 else 17 printf(" %d",j); 18 in[j]--; 19 for (int k = 1; k <= n; k++) 20 { 21 if(p[j][k]==1) 22 in[k]--; 23 } 24 break; 25 } 26 27 } 28 } 29 } 30 int main() 31 { 32 while(~scanf("%d%d",&n,&m)) 33 { 34 memset(p,0,sizeof(p)); 35 memset(in,0,sizeof(in)); 36 int p1,p2; 37 while(m--) 38 { 39 scanf("%d%d",&p1,&p2); 40 if(!p[p1][p2]) 41 { 42 p[p1][p2] = 1; 43 in[p2]++; 44 } 45 } 46 toposort(); 47 puts(""); 48 } 49 return 0; 50 }