当前位置:网站首页>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; }*/
边栏推荐
- Ros-11 common visualization tools
- [daiy4] jz32 print binary tree from top to bottom
- Illustrated network: what is gateway load balancing protocol GLBP?
- ABC#237 C
- Halcon affine transformations to regions
- C [essential skills] use of configurationmanager class (use of file app.config)
- TF coordinate transformation of common components of ros-9 ROS
- Guess riddles (4)
- 319. Bulb switch
- Shift operation of complement
猜你喜欢

Confusing basic concepts member variables local variables global variables

Digital analog 1: linear programming

Run菜单解析

Illustration of eight classic pointer written test questions

ROS learning 4 custom message

Programming implementation of ROS learning 6 -service node

Ros-10 roslaunch summary

Beautiful soup parsing and extracting data

The combination of deep learning model and wet experiment is expected to be used for metabolic flux analysis

我从技术到产品经理的几点体会
随机推荐
图解八道经典指针笔试题
使用arm Neon操作,提高内存拷贝速度
深度学习模型与湿实验的结合,有望用于代谢通量分析
Business modeling of software model | object modeling
Run menu analysis
Use arm neon operation to improve memory copy speed
How apaas is applied in different organizational structures
location search 属性获取登录用户名
Ros- learn basic knowledge of 0 ROS - nodes, running ROS nodes, topics, services, etc
Guess riddles (6)
Run菜单解析
整形的分类:short in long longlong
287. Looking for repeats - fast and slow pointer
asp. Net (c)
Wechat H5 official account to get openid climbing account
Business modeling of software model | vision
js异步错误处理
Apaas platform of TOP10 abroad
Basic number theory -- Euler function
IT冷知识(更新ing~)