zoukankan      html  css  js  c++  java
  • 家谱树 x

    家谱树
    【问题描述】
        有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。
        给出每个人的孩子的信息。
        输出一个序列,使得每个人的后辈都比那个人后列出。
    【输入格式】
        第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<algorithm>
     5 #define Maxn 101
     6 
     7 using namespace std;
     8 
     9 struct zhan{
    10     int z[Maxn],tops;
    11     void add(int x)  //进栈操作 
    12     {
    13         z[++tops]=x;
    14     }
    15     int duitou()     //返回队头元素 
    16     {
    17         return z[tops];
    18     }
    19     void shan()      //删除队头元素 
    20     {
    21         tops--;
    22     }
    23     bool kong()      //检验栈是否为空 
    24     {
    25         return tops == 0 ? 1 : 0;
    26     }
    27     zhan ()//构造函数(与结构体同名,没有返回值,用于初始化) 
    28     {
    29         tops=0;
    30     }
    31 }q;
    32 
    33 int n,temp,qwq;
    34 int du[Maxn],chu[Maxn];
    35 int gx[Maxn][Maxn];
    36 
    37 int main()
    38 {
    39     char s;
    40     scanf("%d",&n);
    41     for(int i=1;i<=n;i++)
    42     {
    43         while(cin>>s)
    44         {
    45             if(s=='0') break;
    46             else
    47             {
    48                 chu[i]++;             //表示i有chu[i]条出度 
    49                 du[s-'0']++;          //s入度++ 
    50                 gx[i][chu[i]]=s-'0';  //说明i的第几(chu[i])条出度为s 
    51             }
    52         }
    53     }
    54     for(int i=1;i<=n;i++) 
    55     {
    56         if(!du[i]) q.add(i);   //如果入度为0,进栈 
    57     }
    58     do
    59     {
    60         temp=q.duitou();
    61         q.shan();
    62         cout<<temp<<" ";
    63         for(int j=1;j<=chu[temp];j++)
    64         {
    65             du[gx[temp][j]]--;     //与刚出栈的'temp'有边的入度-- 
    66             if(!du[gx[temp][j]]) q.add(gx[temp][j]);//如果这个元素的入度为0,进栈 
    67         }
    68     }while(!q.kong());  //终止条件 
    69     return 0;
    70 }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    牛客寒假算法基础集训营1 C 小a与星际探索(思维+异或)
    牛客寒假算法基础集训营4 E Applese 涂颜色
    Python的range()函数用法
    R语言读取XML数据
    R语言如何读取.csv文件
    反转链表
    HashSet HashTable HashMap 区别
    输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
    Activity生命周期之我见
    左旋转字符串
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6709541.html
Copyright © 2011-2022 走看看