在一个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)的更多相关文章

  1. hiho 1613 - 墨水滴 - bfs+优先队列 *

    题目链接 小Ho有一张白纸,上面有NxN个格子.小Ho可以选择一个格子(X, Y),在上面滴一滴墨水.如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子.同时周围的格子也会被这滴墨水浸染 ...

  2. [Offer收割]编程练习赛32

    气泡图 两两判断关系,dfs. #include<stdio.h> #include<string.h> #include<stdlib.h> #include&l ...

  3. HDU 5336——XYZ and Drops——————【广搜BFS】

    XYZ and Drops Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. Hdu 5336 XYZ and Drops (bfs 模拟)

    题目链接: Hdu 5336 XYZ and Drops 题目描述: 有一个n*m的格子矩阵,在一些小格子里面可能会有一些水珠,每个小水珠都有一个size.现在呢,游戏开始咯,在一个指定的空的小格子里 ...

  5. 【bfs基础】①

    bfs,即广度优先搜索,主要通过队列(queue)进行操作. 稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下: 在C++中,队列的头文件定义为:#include<qu ...

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

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

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

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

  8. POJ 3278 Catch That Cow(bfs)

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

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

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

随机推荐

  1. JAVA作用域和排序算法介绍

    一.作用域 1.作用域的概念 所谓的作用域是指引用可以作用到的范围. 一个引用的作用域是从引用定义位置到包裹它的最近的大括号的结束位置.只有在作用域范围内才可以访问到引用,超出作用域无法访问引用. 定 ...

  2. SciKit-Learn 数据集基本信息

    ## 保留版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Le ...

  3. NumPy 矩阵库函数

    章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基于数值区间创建数组 NumPy 数组切 ...

  4. 第九篇 AJAX

    AJAX 阅读目录(Content) 概述 AJAX常见应用情景 AJAX的优缺点 jQuery实现的AJAX $.ajax参数 AJAX请求如何设置csrf_token 序列化 Django内置的s ...

  5. 第二十篇ORM查询与SQL语句

    ORM查询与SQL语句 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情 ...

  6. 转载:Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理

    转载自:https://blog.51cto.com/wjw7702/1150225 一.概述 如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文 ...

  7. UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)

    题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...

  8. HDU 5285:wyh2000 and pupil

    wyh2000 and pupil  Accepts: 93  Submissions: 925  Time Limit: 3000/1500 MS (Java/Others)  Memory Lim ...

  9. 【pwnable.kr】bof

    pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Runnin ...

  10. Hibernate 的SessionFactory

    1.当我们调用 Configuration config=new Configuration().configure(); 时候Hibernate会自动在当前的CLASSPATH中搜寻hibernat ...