当前位置:网站首页>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; }*/
边栏推荐
猜你喜欢
深度学习模型与湿实验的结合,有望用于代谢通量分析
Install the CPU version of tensorflow+cuda+cudnn (ultra detailed)
C [essential skills] use of configurationmanager class (use of file app.config)
Guess riddles (11)
Typescript hands-on tutorial, easy to understand
我从技术到产品经理的几点体会
[Niuke brush questions day4] jz55 depth of binary tree
Guess riddles (6)
Beautiful soup parsing and extracting data
319. Bulb switch
随机推荐
我从技术到产品经理的几点体会
OpenFeign
Ecmascript6 introduction and environment construction
My university
Apaas platform of TOP10 abroad
Halcon Chinese character recognition
Guess riddles (4)
Numpy pit: after the addition of dimension (n, 1) and dimension (n,) array, the dimension becomes (n, n)
Guess riddles (6)
One dimensional vector transpose point multiplication np dot
C语言标准函数scanf不安全的原因
Halcon blob analysis (ball.hdev)
287. Looking for repeats - fast and slow pointer
猜谜语啦(8)
Count of C # LINQ source code analysis
Tips 1: Web video playback code
319. 灯泡开关
Guess riddles (8)
Basic number theory -- Euler function
Pearson correlation coefficient