当前位置:网站首页>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; }*/
边栏推荐
- It cold knowledge (updating ing~)
- Programming implementation of subscriber node of ROS learning 3 subscriber
- Array,Date,String 对象方法
- golang 基础 ——map、数组、切片 存放不同类型的数据
- An enterprise information integration system
- LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件
- Programming implementation of ROS learning 5-client node
- One dimensional vector transpose point multiplication np dot
- Ros-10 roslaunch summary
- golang 基础 —— golang 向 mysql 插入的时间数据和本地时间不一致
猜你喜欢

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

猜谜语啦(7)

Guess riddles (142)

容易混淆的基本概念 成员变量 局部变量 全局变量

Halcon: check of blob analysis_ Blister capsule detection

Guess riddles (3)

Programming implementation of ROS learning 6 -service node

An enterprise information integration system

Guess riddles (9)

Digital analog 1: linear programming
随机推荐
TypeScript手把手教程,简单易懂
Install the CPU version of tensorflow+cuda+cudnn (ultra detailed)
图解网络:什么是网关负载均衡协议GLBP?
Programming implementation of subscriber node of ROS learning 3 subscriber
Redis实现高性能的全文搜索引擎---RediSearch
Reasons for the insecurity of C language standard function scanf
How can fresh students write resumes to attract HR and interviewers
Wechat H5 official account to get openid climbing account
How apaas is applied in different organizational structures
猜谜语啦(3)
My university
Search data in geo database
Count of C # LINQ source code analysis
Pearson correlation coefficient
Apaas platform of TOP10 abroad
ECMAScript6介绍及环境搭建
287. Looking for repeats - fast and slow pointer
c#比较两张图像的差异
Business modeling of software model | stakeholders
Halcon blob analysis (ball.hdev)