### 题目大意:

在一个 $n * m$ 的矩阵中,有空地、坏人、好人和墙。你可以将空地变成墙来堵住坏人。$(n, m)$为出口,是否存在一个方案使得矩阵中所有好人能够走到出口,而所有坏人不能通过出口,相应的输出$Yes$ 和 $No$。

### 思路:

1.预处理:如果坏人和好人相邻,那么坏人一定可以走到隔壁好人,再通过好人的路径走到终点,所以不符合, 输出$No$;

​ 如果当前方格为坏人,我们只有将他四周都堵住,他才能不会走到出口, 即将周围空地变成墙。

2.试想一下,如何挨个判断好人是否能走到出口,是不是太麻烦了,那么反过来想,判断出口$(n, m)$能走到哪些好人方格则只用做一次$bfs$或者$dfs$,如果能走则标记一下。

### 代码:

```cpp
#include
using namespace std;
typedef pair PII;
const int N = 55;

int n, m;
char a[N][N];
bool st[N][N];
int flag = 1, dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};

void dfs(int sx, int sy){
for(int i = 0; i < 4; i++){
int x = sx + dx[i], y = sy + dy[i];
if(x >= 1 && x <= n && y >= 1 && y <= m){
if(a[x][y] == 'G') flag = 0;
if(a[x][y] == '.') a[x][y] = '#';
}

}
}

void bfs(int sx, int sy){
queue q;
q.push({sx, sy});
while(q.size()){
PII t = q.front();
q.pop();
for(int i = 0; i < 4; i++){
int x = t.first + dx[i], y = t.second + dy[i];
if(a[x][y] == '#' || st[x][y]) continue;
if(x >= 1 && x <= n && y >= 1 && y <= m){
st[x][y] = true;
q.push({x, y});
}
}

}
}

int main(){
int T;
cin >> T;
while(T--){
flag = 1;
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> a[i][j];

for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++){
if(a[i][j] == 'B')
dfs(i, j);
}
memset(st, 0, sizeof st);
if(a[n][m] != '#') bfs(n, m);

for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++){
if(a[i][j] == 'G'){
if(st[i][j] == false) flag = 0;
}
}

if(flag) cout << "Yes" << endl;
else cout << "No" << endl;

}
return 0;
}
```

Codeforces 1365D Solve The Maze的更多相关文章

  1. Codeforces Round #648 (Div. 2) D. Solve The Maze

    这题犯了一个很严重的错误,bfs 应该在入队操作的同时标记访问,而不是每次只标记取出的队首元素. 题目链接:https://codeforces.com/contest/1365/problem/D ...

  2. [CodeForces - 197D] D - Infinite Maze

    D - Infinite Maze We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wal ...

  3. 【codeforces 196B】Infinite Maze

    [题目链接]:http://codeforces.com/problemset/problem/196/B [题意] 给你一个n*m的棋盘; 然后你能够无限复制这个棋盘; 在这个棋盘上你有一个起点s; ...

  4. CodeForces 1292A NEKO's Maze Game(思维)

    #include <stdio.h> #include <string.h> #include <iostream> #include <string> ...

  5. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  6. L - Abbott's Revenge(比较复杂的bfs)

    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UV ...

  7. UVa816 Abbott's Revenge

    Abbott's Revenge Time limit: 3.000 seconds Abbott’s Revenge  Abbott’s Revenge The 1999 World FinalsC ...

  8. UVA10384-The Wall Pushers(迭代加深搜索)

    Problem UVA10384-The Wall Pushers Accept: 199   Submit: 1546Time Limit: 10000 mSec Problem Descripti ...

  9. 迷宫问题的C语言求解

    1 .Preface /** * There have been many data to introduce the algorithm. So I will try to simply expla ...

随机推荐

  1. 论文笔记:(CVPR2019)Relation-Shape Convolutional Neural Network for Point Cloud Analysis

    目录 摘要 一.引言 二.相关工作 基于视图和体素的方法 点云上的深度学习 相关性学习 三.形状意识表示学习 3.1关系-形状卷积 建模 经典CNN的局限性 变换:从关系中学习 通道提升映射 3.2性 ...

  2. etcd raft 处理流程图系列2-transport

    本章给出了raftexample中使用的传输层代码,补全了上一节中传输层与raft节点(raft server和channel server)的交互细节.下图中流程的核心在于传输层中的streamRt ...

  3. 《Android原生整合虹软SDK开发uniapp插件》

    1.项目背景 应公司要求,需要开发一套类似人脸打卡功能的app,但是因为我们公司没有很强的原生android开发者,所以根据现状选择了第三方跨平台的uniapp,想必目前大多人都了解这个平台了,我也就 ...

  4. vue 子目录配置,负载均衡 nginx

    1. 我使用的是,腾讯云做负载均衡. 负载均衡配置: https://www.xxxx.com/vue   域名指向的服务器地址:10.10.10.10:80/vue 2. nginx 配置: ser ...

  5. web笔记随笔

    1.Web服务组件 8.第三方内容:广告统计.mockup 7.Web前端框架: HTML5. jQuery. Bootstrap 6.Web应用: CMS. BBS. Blog 5.Web开发框架: ...

  6. 用SamInside破解Windows登录密码

    用小马PE的USB-HDD+格式制作启动优盘: 笔记本启动时按ESC键,选择USB启动: 进入WinPE后,将%SystemRoot%/system32/config全部拷贝出来(WinXP这个文件夹 ...

  7. 了解cookie和storage的区别及优缺点

    共同点:用于数据的存储. 区别: 1.是否需要添加到http请求头? HTTP Cookie(cookie):在客户端存储会话信息,要求服务器对任意HTTP请求发送set-cookie HTTP头作为 ...

  8. vue源码解析之响应式原理

    关于defineReactive等使用细节需要自行了解 一些关键知识点 $mount时 会 new Watcher 把组件的 updateComponent 方法传给watcher 作为getter ...

  9. mybatis源码核心代码

    /** * mybatis源码测试类 * @param args * @throws IOException * @see org.apache.ibatis.session.Configuratio ...

  10. 题解 [SDOI2010]所驼门王的宝藏

    传送门 保分题再度爆零,自闭ing×2 tarjan没写vis数组,点权算的也有点问题 这题情况3的连边有点麻烦,考场上想了暴力想了二分就是没想到可以直接拿map水过去 不过map果然贼慢,所以这也是 ...