• 找树根和孩子


    •【例3-1】找树根和孩子
    【问题描述】
      给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子
    【输入格式】
      第一行:n(结点数<=100),m(边数<=200)。   
        以下m行;每行两个结点x和y,
        表示y是x的孩子(x,y<=1000)。
    【输出格式】
      第一行:树根:root。   
        第二行:孩子最多的结点max。   
        第三行:max的孩子。
     
    简单方法
     1 #include<iostream>
     2 using namespace std;
     3 int tree[101];
     4 int maxn=0;
     5 int maxnroot;
     6 int main()
     7 {
     8     int n,m;
     9     int root=-1;
    10     cin>>n>>m;
    11     for(int i=1;i<=m;i++)
    12     {
    13         int x,y;
    14         cin>>x>>y;
    15         tree[y]=x;
    16     }
    17     for(int i=1;i<=n;i++)
    18     {
    19         if(tree[i]==0)
    20         {
    21             root=i;
    22         }
    23     }
    24     for(int i=1;i<=n;i++)
    25     {
    26         int sum=0;
    27         for(int j=1;j<=n;j++)
    28         {
    29             if(tree[j]==i)
    30             {
    31                 sum++;
    32             }
    33         }
    34         if(sum>maxn)
    35         {
    36             maxn=sum;
    37             maxnroot=i;
    38         }
    39     }
    40     cout<<root<<endl;
    41     cout<<maxnroot<<endl;
    42     for(int i=1;i<=n;i++)
    43     {
    44         if(tree[i]==maxnroot)
    45         {
    46             cout<<i<<" ";
    47         }
    48     }
    49     return 0;
    50 }
    父亲孩子表示法

    1
    #include<iostream> 2 using namespace std; 3 int tree[101]; 4 int maxn=0; 5 int maxnroot; 6 int main() 7 { 8 int n,m; 9 int root=-1; 10 cin>>n>>m; 11 for(int i=1;i<=m;i++) 12 { 13 int x,y; 14 cin>>x>>y; 15 tree[y]=x; 16 } 17 for(int i=1;i<=n;i++) 18 { 19 if(tree[i]==0) 20 { 21 root=i; 22 } 23 } 24 for(int i=1;i<=n;i++) 25 { 26 int sum=0; 27 for(int j=1;j<=n;j++) 28 { 29 if(tree[j]==i) 30 { 31 sum++; 32 } 33 } 34 if(sum>maxn) 35 { 36 maxn=sum; 37 maxnroot=i; 38 } 39 } 40 cout<<root<<endl; 41 cout<<maxnroot<<endl; 42 for(int i=1;i<=n;i++) 43 { 44 if(tree[i]==maxnroot) 45 { 46 cout<<i<<" "; 47 } 48 } 49 return 0; 50 }

    父亲孩子表示法

     1 #include<iostream>
     2 using namespace std;
     3 struct node
     4 {
     5     int parent;
     6     int child[101];
     7     int hzsl;
     8     int date;
     9 }tree[101];
    10 int main()
    11 {
    12     int n,m;
    13     cin>>n>>m;
    14     for(int i=1;i<=m;i++)
    15     {
    16         int x,y;
    17         cin>>x>>y;
    18         tree[x].child[tree[x].hzsl]=y;
    19         tree[x].hzsl++;
    20         tree[y].parent=x;
    21     }
    22     for(int i=1;i<=n;i++)
    23     {
    24         if(tree[i].parent==0)
    25         {
    26             cout<<i<<endl;
    27         }
    28     }
    29     int maxn=0;
    30     int maxnroot=0;
    31     for(int i=1;i<=n;i++)
    32     {
    33         if(tree[i].hzsl>maxn)
    34         {
    35             maxn=tree[i].hzsl;
    36             maxnroot=i;
    37         }
    38     }
    39     cout<<maxnroot;
    40     for(int i=0;i<tree[maxnroot].hzsl;i++)
    41     {
    42         cout<<tree[maxnroot].child[i]<<" ";
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    JUC学习
    java反射学习
    JSON入门学习
    redis
    NoSQ学习
    手写Lockl锁
    MapReduce过程
    scala学习
    idea jetty 配置
    java 基础--理论知识
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6639931.html
Copyright © 2020-2023  润新知