简单拓扑 不能直接dfs 可能有不联通的

1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 using namespace std; 8 vector<int>ed[110]; 9 int n,pa[110],de[110]; 10 void topo() 11 { 12 int i,j; 13 for(i = 1; i <= n ; i++) 14 { 15 for(j = 1; j <= n ;j++) 16 { 17 if(de[j]==0) 18 { 19 de[j] = -1; 20 pa[i] = j; 21 for(int k = 0 ; k < (int)ed[j].size() ; k++) 22 de[ed[j][k]]--; 23 break; 24 } 25 } 26 } 27 } 28 int main() 29 { 30 int i,k; 31 scanf("%d",&n); 32 for(i = 1; i <= n ; i++) 33 { 34 while(scanf("%d",&k)&&k) 35 { 36 ed[i].push_back(k); 37 de[k]++; 38 } 39 } 40 topo(); 41 for(i = 1; i < n ;i++) 42 printf("%d ",pa[i]); 43 printf("%d ",pa[n]); 44 return 0; 45 }