家谱树
【问题描述】
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。
给出每个人的孩子的信息。
输出一个序列,使得每个人的后辈都比那个人后列出。
【输入格式】
第1行一个整数N(1<=N<=100),表示家族的人数。
接下来N行,第I行描述第I个人的儿子。
每行最后是0表示描述完毕。
【输出格式】
输出一个序列,使得每个人的后辈都比那个人后列出。
如果有多解输出任意一解。
【输入样例】
5
0
4 5 1 0
1 0
5 3 0
3 0
【输出样例】
2 4 5 3 1
1 #include<iostream> 2 using namespace std; 3 #define N 1010 4 int son[N][N]; 5 int n,m; 6 int stack[N]; 7 int top; 8 int ru[N]; 9 int main() 10 { 11 cin>>n; 12 for(int i=1;i<=n;++i) 13 { 14 while(cin>>m) 15 { 16 if(m==0)break; 17 son[i][++son[i][0]]=m; 18 ru[m]++; 19 } 20 } 21 for(int i=1;i<=n;++i) 22 if(ru[i]==0)stack[++top]=i; 23 for(int i=1;i<=n;++i) 24 { 25 int d=stack[top--]; 26 cout<<d<<" "; 27 for(int j=1;j<=son[d][0];++j) 28 { 29 ru[son[d][j]]--; 30 if(ru[son[d][j]]==0)stack[++top]=son[d][j]; 31 } 32 } 33 return 0; 34 }