[蓝桥杯]第十一届决赛B组试题解析_试题 历届真题 补给【第十一届】【决赛】 ...

打印 上一主题 下一主题

主题 1876|帖子 1876|积分 5632

标题链接:

https://www.lanqiao.cn/problems/1018/learning/
B 扩散

标题形貌
本题为填空题,只必要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表现。
小蓝在画布上起首点了一下几个点:(0,0),(2020,11),(11,14),(2000,2000)。
只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。详细的,假如一个格子内里是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(假如原来就是黑色,则还是黑色)。
请问,经过 2020 分钟后,画布上有多少个格子是黑色的。
题解:

在这道题中,我们必要留意 扩散的方向是垂直方向即(上下左右),且每过一分钟就会扩散一个距离,标题要求2020分钟之后,即在单个方向上,扩散的距离为2020,纵然标题上说坐标是无限大的,但是由于条件限制,我们是可以模拟出坐标的:
四个点经过2020分钟的扩散,情况如下

通过上面的扩散情况,我们发现坐标的范围其着实 x轴属于(0-2020,2000+2020) , y轴属于(0-2020,2020+2020)
我们仅仅必要用一个二位数组表现坐标系(未扩散到的地方用0表现,扩散到的地方用1标识),每过一分钟,从四个点的位置处扩散,2020分钟扩散完毕之后,判断二维数组中1的个数即可
代码:

  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4. struct node{
  5.         node(int _x,int _y,int _cnt)
  6.         :x(_x)
  7.         ,y(_y)
  8.         ,cnt(_cnt)
  9.         {
  10.         }
  11.     int x , y , cnt;
  12.     //cnt记录本次移动是第几次移动
  13. };
  14. //因为有的编程语言中数组坐标不支持负数,所以我们整体加上2020
  15. int nex[4][2] = {
  16.   {1 , 0} , {-1 , 0} , {0 , 1} , {0 , -1}};
  17. const int row=2020+2020+2020+1;
  18. const int col=2000+2020+2020+1;
  19. const int B = 2020;
  20. int map[row][col];
  21. int bfs()
  22. {
  23.     queue<node> que;
  24.     int cnt = 4; // 初始的黑色的点的个数
  25.     //我们需要使用队列来记录我们需要从那个点进行方向移动
  26.     que.push(node(0 + B , 0 + B , 0));
  27.     que.push(node(2020 + B , 11 + B , 0));
  28.     que.push(node(2000 + B , 2000 + B , 0));
  29.     que.push(node(11 + B , 14 + B , 0));
  30.     map[0 + B][0 + B] = 1;
  31.     map[2020 + B][11 + B] = 1;
  32.     map[2000 + B][200
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表