家谱树
「题目描述」
有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。
给出每个人的孩子的信息。
输入一个序列,使得每个人的后辈都比那个人后列出。
「输入」
第一行一个整数(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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include<iostream> using namespace std; int main() {     int n;     cin>>n;     int r[101]={0},c[101]={0},a[101][101]={0};     int tot=0,ans[101]={0},m=0,t;     int i,j;     for(i=1;i<=n;i++)        {        cin>>j;        while(j!=0)        {                   c[i]++;                   a[i][c[i]]=j;                   r[j]++;                   cin>>j;                   }        }     for(i=1;i<=n;i++)        if(r[i]==0)ans[++tot]=i;     while(m!=n)     {                t=ans[tot];                cout<<t<<' ';                tot--;                m++;                for(i=1;i<=c[t];i++)                {                                    r[a[t][i]]--;                                    if(r[a[t][i]]==0)                                       ans[++tot]=a[t][i];                                    }                }     //system("pause");     return 0; } | 
                                  Subscribe  
                            
                                                                        
                    