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\n",pi,s);
83     return 0;
84 }

 

posted @ 2016-02-25 10:19  fancy_boy  阅读(411)  评论(0编辑  收藏  举报