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=;
  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=-;
  19. int bfs()
  20. {
  21. int c=;
  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()!=)
  34. {
  35. if(flag==false)
  36. {
  37. int len = p[id].size();
  38. for(int i = ;i<len;i++)
  39. {
  40. node tn={p[id][i],ct+};//结构体对象赋值的简化表达
  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 = ;i<m;i++)
  65. {
  66. scanf("%d",&k);
  67. for(int j = ;j<=k;j++)
  68. {
  69. scanf("%d",&t);
  70. p[i].push_back(t);
  71. }
  72. }
  73. node nd;
  74. nd.v=;
  75. nd.cnt=;
  76. q.push(nd);
  77. s = bfs();
  78. for(int i = ;i<=minct;i++)
  79. {
  80. pi=pi*(+r/100.0);
  81. }
  82. printf("%.4lf %d\n",pi,s);
  83. return ;
  84. }

PAT1106(BFS)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 18.Django原生SQL语句查询返回字典

    在django中执行自定义语句的时候,返回的结果是一个tuple ,并我不是我所期望的dict.当结果是tuple 时,如果要取得数据,必须知道对应数据在结果集中的序号,用序号的方式去得到值. 如果是 ...

  2. 跟我一起用Symfony写一个博客网站;

    我的微信公众号感兴趣的话可以扫一下, 或者加微信号   whenDreams 第一部分:基础设置,跑起一个页面-首页 第一步: composer create-project symfony/fram ...

  3. POJ - 3414 Pots 【BFS】

    题目链接 http://poj.org/problem?id=3414 题意 给出两个杯子 容量分别为 A B 然后给出C 是目标容量 有三种操作 1 将一个杯子装满 2.将一个杯子全都倒掉 3.将一 ...

  4. 数据库连接理解——JDBC

    需求:数据库操作 数据是:用户信息 1.连接数据库  JDBC Hibernate 2.操作数据库 c create r read u update d delete 3.关闭数据库连接 interf ...

  5. 【leetcode刷题笔记】Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  6. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...

  7. inline 元素的特性

    http://www.maxdesign.com.au/articles/inline/ http://www.w3.org/TR/CSS2/visuren.html#inline-boxes htt ...

  8. hbase shell-namespace(命名空间指令)

    hbase shell命名空间namespace篇: 1. alter_namespace (一般用于添加删除一个属性,很少使用) hbase(main)::> help 'alter_name ...

  9. vue-cli3 set vue.config.js

    //config目录下index.js配置文件// see http://vuejs-templates.github.io/webpack for documentation.// path是nod ...

  10. html转义字符及css清除

    1. [代码][Java]代码     ​import java.util.HashMap;import java.util.Map; import org.apache.commons.lang3. ...