当前位置:网站首页>Codeforces Round #648 (Div. 2) D. Solve The Maze
Codeforces Round #648 (Div. 2) D. Solve The Maze
2022-07-05 08:51:00 【Qizi K】
Codeforces Round #648 (Div. 2) D. Solve The Maze
label :BFS.
The question : Give me a maze ,‘#’ Represents a wall ,‘G’ Show good people ,’B‘ It means bad people , End at (n,m). Ask if you can add a wall to the open space , So that all good people can go to the end , All bad guys can't get to the end .
tips:
A. greedy , Consider adding walls where you can add walls around all the bad guys ( Surround the bad guys ). If a bad man is next to a good man , Obviously NO( Because where good people can go, bad people can go qwq).
B. If there are no good people , Direct output YES( You can directly block the end ).【 But note that you can't output directly without bad people YES, Because good people may be blocked by walls 】.
C. Don't run to every good person BFS, This complexity is too high . Because if every good person can finally reach the end , Then run backwards from the end BFS, The number of good people that can pass should be the total number of good people . once BFS that will do .
#include<bits/stdc++.h>
#define m_p make_pair
using namespace std;
int n,m,t,cntgood;
int dir[4][2] = {
{
0,1},{
0,-1},{
1,0},{
-1,0}};
vector<pair<int, int> > bad;
vector<pair<int, int> > :: iterator it;
char mp[55][55];
void init(){
while(!bad.empty()) bad.pop_back();
cntgood = 0;
}
int bfs(){
if(mp[n][m] == '#') return 0;
int cnt = 0;
bool vis[55][55] = {
false};
queue<pair<int, int> >q;
q.push(m_p(n, m));
while(!q.empty()){
int xx = q.front().first, yy = q.front().second; q.pop();
if(vis[xx][yy]) continue;
vis[xx][yy] = true;
if(mp[xx][yy] == 'G') cnt++;
for(int k = 0; k < 4; ++k){
int tx = xx + dir[k][0] , ty = yy + dir[k][1];
if(tx < 1 || tx > n || ty < 1 || ty > m || mp[tx][ty] == '#') continue;
q.push(m_p(tx, ty));
}
}
return cnt;
}
void solve(){
init();
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; ++i){
getchar();
for(int j = 1; j <= m; ++j){
scanf("%c",&mp[i][j]);
if(mp[i][j] == 'B') bad.push_back(m_p(i,j));
if(mp[i][j] == 'G') cntgood++;
}
}
if(!cntgood) printf("Yes\n");
else{
for(it = bad.begin(); it != bad.end(); ++it){
int x = it->first, y = it->second;
for(int k = 0; k < 4; ++k){
int tx = x + dir[k][0] , ty = y + dir[k][1];
if(tx < 1 || tx > n || ty < 1 || ty > m) continue;
if(mp[tx][ty] == 'G'){
printf("No\n");
return ;
}else if(mp[tx][ty] == '.') mp[tx][ty] = '#';
}
}
(bfs() == cntgood) ? printf("Yes\n") : printf("No\n");
}
}
int main(){
scanf("%d",&t);
while(t--)
solve();
return 0;
}
/*bool bfs(int x, int y){ // Don't do that bfs, Run for everyone bfs Too slow bool vis[55][55] = {false}; queue<pair<int, int> >q; q.push(m_p(x, y)); while(!q.empty()){ int xx = q.front().first, yy = q.front().second; q.pop(); if(xx == n && yy == m) return true; if(vis[xx][yy]) continue; vis[xx][yy] = true; for(int k = 0; k < 4; ++k){ int tx = xx + dir[k][0] , ty = yy + dir[k][1]; if(tx < 1 || tx > n || ty < 1 || ty > m || mp[tx][ty] == '#') continue; q.push(m_p(tx, ty)); } } return false; }*/
边栏推荐
- Halcon snap, get the area and position of coins
- JS asynchronous error handling
- Dynamic dimensions required for input: input, but no shapes were provided. Automatically overriding
- Install the CPU version of tensorflow+cuda+cudnn (ultra detailed)
- 图解网络:什么是网关负载均衡协议GLBP?
- 多元线性回归(sklearn法)
- Use arm neon operation to improve memory copy speed
- LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
- [daiy4] jz32 print binary tree from top to bottom
- Numpy pit: after the addition of dimension (n, 1) and dimension (n,) array, the dimension becomes (n, n)
猜你喜欢

猜谜语啦(4)

Halcon color recognition_ fuses. hdev:classify fuses by color

Halcon affine transformations to regions

猜谜语啦(11)

Guess riddles (7)
![C [essential skills] use of configurationmanager class (use of file app.config)](/img/8b/e56f87c2d0fbbb1251ec01b99204a1.png)
C [essential skills] use of configurationmanager class (use of file app.config)

AUTOSAR从入门到精通100讲(103)-dbc文件的格式以及创建详解

Use and programming method of ros-8 parameters

TF coordinate transformation of common components of ros-9 ROS

Ros- learn basic knowledge of 0 ROS - nodes, running ROS nodes, topics, services, etc
随机推荐
Typescript hands-on tutorial, easy to understand
kubeadm系列-02-kubelet的配置和启动
[daiy4] copy of JZ35 complex linked list
Wheel 1:qcustomplot initialization template
My university
ORACLE进阶(三)数据字典详解
ROS learning 4 custom message
Meta标签详解
Use arm neon operation to improve memory copy speed
golang 基础 —— golang 向 mysql 插入的时间数据和本地时间不一致
Programming implementation of subscriber node of ROS learning 3 subscriber
Array, date, string object method
Halcon snap, get the area and position of coins
location search 属性获取登录用户名
Business modeling of software model | stakeholders
[牛客网刷题 Day4] JZ55 二叉树的深度
Bit operation related operations
猜谜语啦(7)
Oracle advanced (III) detailed explanation of data dictionary
Characteristic Engineering