【问题描述】
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。
给出每个人的孩子的信息。
输出一个序列,使得每个人的后辈都比那个人后列出。
【输入格式】
第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 #include<cstdio>
3 #include<cstring>
4 #include<stack>
5 using namespace std;
6 int map[101][101];
7 stack<int>s;
8 int rudu[101];
9 int main()
10 {
11 int n;
12 scanf("%d",&n);
13 for(int i=1;i<=n;i++)
14 {
15 int a;
16 while(scanf("%d",&a))
17 {
18 if(a==0)break;
19 map[i][a]=1;
20 rudu[a]++;
21 }
22 }
23 for(int i=1;i<=n;i++)
24 {
25 if(rudu[i]==0)
26 {
27 s.push(i);
28 }
29 }
30 while(s.size()!=0)
31 {
32 int p=s.top();
33 s.pop();
34 printf("%d ",p);
35 for(int i=1;i<=n;i++)
36 {
37 if(map[p][i]==1)
38 {
39 rudu[i]--;
40 if(rudu[i]==0)s.push(i);
41 }
42 }
43 }
44 return 0;
45 }