打水滴(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 ...
随机推荐
- 记一次docker使用异常
背景: win10 docker 有几天没有用Oracle数据库,突然发现数据库挂了 docker start oracle 报错 具体错误信息: Error starting userland pr ...
- Arduino函数
输入输出函数 pinMode(pin, mode)将数位脚位(digital pin)指定为输入或输出.如:pinMode(7,INPUT); // 将脚位 7 设定为输入模式 digitalWrit ...
- ICE使用记录
在使用ice中间件的过程中 如果A继承了 ****Disp_类 在使用A类的时候 ****Disp_类会浅表克隆该类出一个新的对象a 在调用重写的接口的时候是使用a 在主动调用A类的对象的时候使用的才 ...
- Java 逆序打印链表
递归 package cookie; public class PrintListReversal { public void reversalOut(Node head) { if (head != ...
- vs code 切换语言(切换回英文)
安装中文 安装教程:https://www.cnblogs.com/chenxi188/protected/p/11757456.html 切换回英文 调出搜索:ctrl+shift+p 输入:lan ...
- 图床工具PicGO实现七牛云图片上传
图床工具PicGO实现七牛云图片上传 我们在写博客或者网络文章时经常需要上传图片.目前最有名气的图床工具就是PicGO. 简单的界面,完整的功能,在相册里也能直接复制markdown图片链接.一直深受 ...
- [ACTF2020 新生赛]BackupFile
0x00 知识点 备份文件 index.php.bak str弱相等被转化为整型 0x01解题 根据提示下载备份文件得到源码 看到==弱相等 且被强制转为整型 http://7d5cccc5-4ecd ...
- Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”
今天在调程序的时候遇到这个问题 解决办法:将安装在MDK下面的文件属性由只读去掉: 成功!可以下载.
- 关联容器--保存指针时要指定容器的比较类型---引用Effective STL
无论何时你建立指针的关联容器,注意你也得指定容器的比较类型.大多数时候,你的比较类型只是解引用指针并比较所指向的对象(就像上面的StringPtrLess做的那样).鉴于这种情况,你手头最好也能有一个 ...
- POJ 2226 缩点建图+二分图最大匹配
这个最小覆盖但不同于 POJ 3041,只有横或者竖方向连通的点能用一块板子覆盖,非连续的,就要用多块 所以用类似并查集方法,分别横向与竖向缩点,有交集的地方就连通,再走一遍最大匹配即可 一开始还有点 ...