D. Solve The Maze
Vivek has encountered a problem. He has a maze that can be represented as an n×m grid. Each of the grid cells may represent the following:

Empty — ‘.’
Wall — ‘#’
Good person — ‘G’
Bad person — ‘B’
The only escape from the maze is at cell (n,m).

A person can move to a cell only if it shares a side with their current cell and does not contain a wall. Vivek wants to block some of the empty cells by replacing them with walls in such a way, that all the good people are able to escape, while none of the bad people are able to. A cell that initially contains ‘G’ or ‘B’ cannot be blocked and can be travelled through.

Help him determine if there exists a way to replace some (zero or more) empty cells with walls to satisfy the above conditions.

It is guaranteed that the cell (n,m) is empty. Vivek can also block this cell.

Input
The first line contains one integer t (1≤t≤100) — the number of test cases. The description of the test cases follows.

The first line of each test case contains two integers n, m (1≤n,m≤50) — the number of rows and columns in the maze.

Each of the next n lines contain m characters. They describe the layout of the maze. If a character on a line equals ‘.’, the corresponding cell is empty. If it equals ‘#’, the cell has a wall. ‘G’ corresponds to a good person and ‘B’ corresponds to a bad person.

Output
For each test case, print “Yes” if there exists a way to replace some empty cells with walls to satisfy the given conditions. Otherwise print “No”

You may print every letter in any case (upper or lower).

Example
inputCopy
6
1 1
.
1 2
G.
2 2
#B
G.
2 3
G.#
B#.
3 3
#B.
#…
GG.
2 2
#B
B.
outputCopy
Yes
Yes
No
No
Yes
Yes
Note
For the first and second test cases, all conditions are already satisfied.

For the third test case, there is only one empty cell (2,2), and if it is replaced with a wall then the good person at (1,2) will not be able to escape.

For the fourth test case, the good person at (1,1) cannot escape.

For the fifth test case, Vivek can block the cells (2,3) and (2,2).

For the last test case, Vivek can block the destination cell (2,2).

先把坏人堵住,然后再BFS搜就行了
注意:不要把坏人旁边的坏人变成墙,不然会漏写。我一开始就wa了4发这个问题。。。。。

#include <iostream>
#include <algorithm>
#include <set>
#include <cstring>
#include <queue>
using namespace std;
#define int long long
char ch[55][55];
char g[55][55];
int f1[] = {0, 0, 1, -1};
int f2[] = {1, -1, 0, 0};
int cou = 0;
int n, m;
bool pan[55][55];
struct node
{int x, y;
};
void BFS(int a, int b)
{queue<node> cun;if (ch[a][b]=='#') return;cun.push({a, b});pan[a][b] = true;if (ch[a][b] == 'G')cou++;while (!cun.empty()){int x = cun.front().x;int y = cun.front().y;cun.pop();for (int i = 0; i < 4; i++){int xx = x + f1[i];int yy = y + f2[i];if (xx <= n && yy <= m && xx >= 1 && yy >= 1 && pan[xx][yy] == false){if (ch[xx][yy] != '#'){if (ch[xx][yy] == 'G')cou++;cun.push({xx, yy});pan[xx][yy] = true;}}}}
}
signed main()
{int t;cin >> t;while (t--){cou = 0;int hh = 0;memset(ch, '#', sizeof(ch));memset(pan, false, sizeof(pan));cin >> n >> m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> ch[i][j];if (ch[i][j] == 'G')hh++;}}bool flag = true;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){if (ch[i][j] == 'B'){for (int h = 0; h < 4; h++){int x = i + f1[h];int y = j + f2[h];if (ch[x][y]!='B') ch[x][y] = '#';//这里注意}}}}if (hh == 0){cout << "YES" << endl;}else{BFS(n, m);//   cout<<cou<<" "<<hh<<endl;if (cou == hh)cout << "YES" << endl;elsecout << "NO" << endl;}}
}

D. Solve The Maze Codeforces Round #648 (Div. 2)相关推荐

  1. Codeforces Round #648 (Div. 2)(A, B, C, D)

    Codeforces Round #648 (Div. 2) 或许更好的阅读体验 A:Matrix Game 思路 题意可以说是非常简单的,我们选定的格子的行列都不能存在1,可以发现我们可以放的格子一 ...

  2. Codeforces Round #648 (Div. 2)题解 A-D

    文章目录 A - Matrix Game B - Trouble Sort C - Rotation Matching D - Solve The Maze A - Matrix Game 题解:其实 ...

  3. B. Trouble Sort Codeforces Round #648 (Div. 2)

    B. Trouble Sort Ashish has n elements arranged in a line. These elements are represented by two inte ...

  4. Codeforces Round #756 (Div. 3)

    Codeforces Round #756 (Div. 3) A. Make Even 思路:如果末尾是偶数,不需要操作:如果开头是偶数,一次操作,即全翻转:如果开头和末尾都是 奇数,判断里面是否有偶 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. 《科学》十大年度科学突破反映的新动向
  2. 【Spark 深入学习 04】再说Spark底层运行机制
  3. 【学习笔记】含委托加工(转包)的标准成本估算
  4. 【人工智能】命题逻辑测验题题解
  5. 阿里云 推荐码   为自己省钱
  6. 第十届常州国际动漫艺术周
  7. WordPress 插件开发实例 – 详细注释的 Widget 开发例子
  8. 认识position=fixed
  9. XMLHttpRequest接收JSON请求
  10. Facebook 游戏开发更新文档 API 参考文档 v5.0
  11. springMVC+mybatis
  12. 超级实用的分时图指标 有了本分时图你根本不用看K线了
  13. 基于遗传算法解决城市TSP问题
  14. adf被打开_ADF格式文件 如何打开ADF文件 ADF是什么格式的文件 用什么打开 - The X Online Tools...
  15. 用keras采用DCGAN网络生成三国群英传7的人物头像
  16. IPU相关知识(一)
  17. 如何在 Ubuntu 中加密硬盘
  18. 顿号、分号;这些标点符号的用法
  19. How Intense Are You? Predicting Intensities of Emotions and Sentiments Using Stacked Ensemble
  20. 文件,文件夹对比工具(Beyond Compare)

热门文章

  1. php 识别语种,HYPHP增加多国语言支持 PHP通过用户浏览器判断来源国家方案
  2. python def函数_Python教程之Lambda表达式知识概述
  3. Android kotlin实现底部导航栏
  4. ubuntu18.04安装mysql8
  5. Flume与Kafka整合案例详解
  6. scrapy爬虫系列之五--CrawlSpider的使用
  7. java-web的mybatis的学习
  8. Python——assert(断言函数)
  9. Fiddler 学习笔记---命令、断点
  10. redis 批量删除操作