• PAT1106(BFS)


    PAT 1106

    思路

    BFS用在tree上,这一个题里主要关注的是用vector去保存每一个节点所连接的子节点,当BFS 时,一旦发现该节点下面没有子节点,这一层一定是最短的路径,然后用当前的层数去为后面的节点做判断,如果接下来,仍然有节点没有子节点,那么用层数去验 证,如果层数一致则是,否则不是。

    STL——vector

    vector

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<vector>
     6 #include<queue>
     7 #define LL long long;
     8 using namespace std;
     9 const int MAXN=100005;
    10 double pi,r;
    11 struct node//节点
    12 {
    13     int v;//节点编号
    14     int cnt;//记录距离根节点的层数
    15 };
    16 vector <int> p[MAXN];//构造这棵树
    17 queue <node> q;
    18 int minct=-1;
    19 int bfs()
    20 {
    21     int c=0;
    22     bool flag = false;
    23 
    24     while(!q.empty())
    25     {
    26         node nd = q.front();
    27         q.pop();
    28         int id = nd.v;
    29         int ct = nd.cnt;
    30         //初始情况下flag记为false,也就是还未有叶子节点
    31         //当第一次出现有叶子节点是flag变为true
    32         //如果flag记为true,那么后面的节点如果还有子节点也没有必要再放进去了
    33         if(p[id].size()!=0)
    34         {
    35             if(flag==false)
    36             {
    37                 int len = p[id].size();
    38                 for(int i = 0;i<len;i++)
    39                 {
    40                     node tn={p[id][i],ct+1};//结构体对象赋值的简化表达
    41                     q.push(tn);
    42                 }
    43             }
    44         }
    45         else
    46         {
    47             //如果第一次有叶子节点即(flag==false)
    48             //或者后面发现叶子节点层数相同(minct==ct)
    49             if(flag==false||minct==ct)
    50             {
    51                 flag=true;
    52                 minct=ct;
    53                 c++;
    54             }
    55         }
    56     }
    57     return c;
    58 }
    59 int main()
    60 {
    61     freopen("1106.txt","r",stdin);
    62     int m,k,t,s;
    63     cin>>m>>pi>>r;
    64     for(int i = 0;i<m;i++)
    65     {
    66         scanf("%d",&k);
    67         for(int j = 1;j<=k;j++)
    68         {
    69             scanf("%d",&t);
    70             p[i].push_back(t);
    71         }
    72     }
    73     node nd;
    74     nd.v=0;
    75     nd.cnt=0;
    76     q.push(nd);
    77     s = bfs();
    78     for(int i = 1;i<=minct;i++)
    79     {
    80         pi=pi*(1+r/100.0);
    81     }
    82     printf("%.4lf %d
    ",pi,s);
    83     return 0;
    84 }
  • 相关阅读:
    2017第17周四当前工作中困境与挑战思考
    2017第17周三
    2017第17周二
    最小可行产品
    《穷查理宝典》中三条最重要的学习方法
    机场打车有感
    2017第15周五
    2017第15周四
    三条经济学原理帮你做出正确的选择
    Mac通过安装Go2Shell实现“在当前目录打开iTerm2”
  • 原文地址:https://www.cnblogs.com/fancy-itlife/p/5216020.html
Copyright © 2020-2023  润新知