打水滴(BFS)
在一个n行m列的网格中,某些位置存在一些水滴。嘟嘟进行q次打水滴操作,每次嘟嘟在某一个网格当中添加一个水滴,当某一网格中的水滴数量超过L时,该网格中的水滴变为四个水滴,并分别向上下左右四个方向飞出,每个飞出的水滴如果遇到一个包含水滴的网格时,则该水滴停在该网格当中,如果一直没有遇到,则该水滴将飞出网格。所有水滴移动的速度都相同,每秒移动一格。如果最终时刻所有网格中都不包含水滴,则嘟嘟取得了胜利。
注意:如果同一秒有多个水滴同时进入一个网格,那么应该等所有水滴都进入以后再会破裂。q次打水滴,嘟嘟都会等到不在有水滴移动了以后才会滴下一滴水滴。每次打水滴操作后,直到所有水滴都不再移动,才会进行下一次的打水滴操作。
输入格式
第一行包含三个整数n,m(1≤n,m≤100),L(5≤L≤10)。
接下来n行每行包含m个整数,每个整数在区间[0,L]范围内,表示每个网格中的水滴数量。
接下来一行包含一个整数q(q≤2500)。
接下来q行每行包含两个整数x,y(1≤x≤n,1≤y≤m),表示嘟嘟每次添加水滴的位置。
输出格式
对于每组测试数据,如果所有水滴都消失,则输出"YES",否则第一行输出"NO",接下来n行每行输出m个整数,表示每个网格中的水滴数量。
输入样例1
输出样例1
- YES
输入样例2
输出样例2
- NO
- #include <stdio.h>
- #include <string.h>
- #include <iostream>
- #include <string>
- #include <math.h>
- #include <algorithm>
- #include <vector>
- #include <stack>
- #include <queue>
- #include <set>
- #include <map>
- #include <sstream>
- const int INF=0x3f3f3f3f;
- typedef long long LL;
- const int mod=1e9+;
- const double PI = acos(-);
- const double eps =1e-;
- #define Bug cout<<"---------------------"<<endl
- const int maxn=1e7+;
- using namespace std;
- int n,m,L;
- int G[][];
- int tm[][];//记录每个位置水滴破开的时间
- struct node
- {
- int x,y;//坐标
- int pos;//记录移动方向
- int time;//记录时间
- };
- int NT[][]={{-,},{,},{,},{,-}};
- void BFS(int x,int y)
- {
- node now,to;
- queue<node> qe;
- G[x][y]++;
- if(G[x][y]>L)//如果会破开才会BFS
- {
- for(int i=;i<;i++)//4个方向都要有
- {
- now.x=x;
- now.y=y;
- now.pos=i;
- now.time=;
- qe.push(now);
- }
- G[x][y]=;//归0
- tm[x][y]=;//开始时间初始为0
- }
- while(!qe.empty())
- {
- now=qe.front();
- qe.pop();
- int xx=now.x+NT[now.pos][];
- int yy=now.y+NT[now.pos][];
- if(xx>&&xx<=n&&yy>&&yy<=m)
- {
- if(now.time+==tm[xx][yy]) continue;//处理同一秒多个水滴进入同一个格子
- else if(G[xx][yy])
- {
- G[xx][yy]++;
- if(G[xx][yy]>L)
- {
- for(int i=;i<;i++)
- {
- to.x=xx;
- to.y=yy;
- to.pos=i;
- to.time=now.time+;
- qe.push(to);
- }
- G[xx][yy]=;
- tm[xx][yy]=now.time+;//记录时间
- }
- }
- else//该位置没水滴会向更远处传递
- {
- to.x=xx;
- to.y=yy;
- to.pos=now.pos;
- to.time=now.time+;//记录时间
- qe.push(to);
- }
- }
- }
- }
- int main()
- {
- #ifdef DEBUG
- freopen("sample.txt","r",stdin);
- #endif
- scanf("%d %d %d",&n,&m,&L);
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=m;j++)
- scanf("%d",&G[i][j]);
- }
- int q;
- scanf("%d",&q);
- for(int i=;i<=q;i++)
- {
- memset(tm,-,sizeof(tm));
- int x,y;
- scanf("%d %d",&x,&y);
- BFS(x,y);
- }
- int sum=;
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=m;j++)
- sum+=G[i][j];
- }
- if(sum)
- {
- printf("NO\n");
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=m;j++)
- printf(j==m?"%d\n":"%d ",G[i][j]);
- }
- }
- else printf("YES\n");
- return ;
- }
-
打水滴(BFS)的更多相关文章
- hiho 1613 - 墨水滴 - bfs+优先队列 *
题目链接 小Ho有一张白纸,上面有NxN个格子.小Ho可以选择一个格子(X, Y),在上面滴一滴墨水.如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子.同时周围的格子也会被这滴墨水浸染 ...
- [Offer收割]编程练习赛32
气泡图 两两判断关系,dfs. #include<stdio.h> #include<string.h> #include<stdlib.h> #include&l ...
- HDU 5336——XYZ and Drops——————【广搜BFS】
XYZ and Drops Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- Hdu 5336 XYZ and Drops (bfs 模拟)
题目链接: Hdu 5336 XYZ and Drops 题目描述: 有一个n*m的格子矩阵,在一些小格子里面可能会有一些水珠,每个小水珠都有一个size.现在呢,游戏开始咯,在一个指定的空的小格子里 ...
- 【bfs基础】①
bfs,即广度优先搜索,主要通过队列(queue)进行操作. 稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下: 在C++中,队列的头文件定义为:#include<qu ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
随机推荐
- Vue.js(24)之 弹窗组件封装
同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...
- python画一只佩奇
用python画一只佩奇 from turtle import* def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 sethead ...
- robotframework+selenium2Library怎样不用手动关掉代理
每次跑脚本,启动浏览器都要手动关掉代理,太费劲了,发现最简单的办法就是在局域网设置里面勾上跳过本地地址的代理服务器,并且在例外里写上127.0.0.1 就这么简单有没有??
- POJ1833 & POJ3187 & POJ3785
要是没有next_permutation这个函数,这些题觉得还不算特别水,不过也不一定,那样可能就会有相应的模板了.反正正是因为next_permutation这个函数,这些题包括之前的POJ1226 ...
- k8s deployment yam 文件分析
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: namespace: labels:spec: replicas: #设 ...
- 《新标准C++程序设计》1.1-1.6(C++学习笔记1)
1.cout输出 cout<<待输出项<<待输出项2<<···; 2.cin输入 cin>>变量1>>变量2>>···; 3.C ...
- idea自定义模版
点小灯 编辑live模版设置 模版全称 private static final Logger logger = LoggerFactory.getLogger($classname$.class); ...
- 微服务基础——厉害了!API网关
微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...
- (递归)Hanoi Tower
#include<stdio.h>void move(int n,char a,char b){ printf("将第%d个盘子从%c移动到%c\n",n,a,b); ...
- part6 城市页面搜索内容开发
keyword 监听时间做一个节流处理 keyword为input输入的内容 //当逻辑卡壳的时候 可以试着重启服务器,浏览器 当搜索内容出现很多的时候 内容无法滚动 可以引入 better-scro ...