简单的拓扑排序,就是每次寻找入度为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 }