家谱树 拓扑排序【模板】
1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 #include <queue> 6 #define maxn 10015 7 8 using namespace std; 9 10 int n,a,cnt,num,x; 11 int du_chu[maxn],du_ru[maxn]; 12 int e[115][115]; 13 14 int main() 15 { 16 scanf("%d",&n); 17 for(int i=1;i<=n;i++) 18 { 19 while((cin>>a)&&a!=0) 20 { 21 du_chu[i]++; 22 du_ru[a]++; 23 e[i][du_chu[i]]=a; 24 } 25 } 26 queue<int>que; 27 for(int i=1;i<=n;i++) 28 if(du_ru[i]==0) 29 que.push(i); 30 while(!que.empty()) 31 { 32 x=que.front(); 33 cout<<x<<" "; 34 que.pop(); 35 for(int i=1;i<=du_chu[x];i++) 36 { 37 du_ru[e[x][i]]--; 38 if(du_ru[e[x][i]]==0) 39 que.push(e[x][i]); 40 } 41 42 } 43 return 0; 44 } 45 /* 46 5 47 0 48 4 5 1 0 49 1 0 50 5 3 0 51 3 0 52 */
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。