简单的拓扑排序,就是每次寻找入度为0的点,高级一些的BFS算法本质上和这个也是一样的。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 using namespace std;
 5 vector <int > a[105];
 6 int in[105],ans[105];
 7 int main()
 8 {
 9     int n,m,i,j,t,l;
10     while(~scanf("%d",&n))
11     {
12         memset(in,0,sizeof(in));
13         l = 0;
14         for(i = 1; i <= n; i++)
15             while(scanf("%d",&t),t)
16             {
17                 a[i].push_back(t);
18                 in[t]++;
19             }
20         while(l < n)
21         {
22             for(i = 1; i <= n; i++)
23                 if(!in[i])
24             {
25                 ans[++l] = i;
26                 m = a[i].size();
27                 for(j = 0; j < m; j++)
28                     in[a[i][j]]--;
29                 in[i] = 250;
30                 a[i].clear();
31             }
32         }
33         for(i = 1; i < n; i++)
34             printf("%d ",ans[i]);
35         printf("%d\n",ans[n]);
36     }
37     return 0;
38 }