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

题目链接:

Problem - 1365D - CodeforcesCodeforces. Programming competitions and contests, programming communityicon-default.png?t=N7T8https://codeforces.com/problemset/problem/1365/D

题目大意:

有一张地图n行m列(地图外面全是墙),里面有好人(G),坏人(B),道路(.),墙(#),出口在n,m,人可以往上下左右走(不论好坏)。

你可以把道路变成墙,问你是否可以把所有的坏人封住,让所有的好人逃出?

思路:

地图有4种情况。但无所谓咱们又不是对4种情况去判断。

把坏人周围4格的道路封住,最后从终点去看所有的好人能不能到这里,有没有坏人能到这。

方法:

在读入图之后,遍历每一个点,遍历到坏人时,在周围4格尝试建墙。

最后用bfs查询:

bool bfs(){//寻找能出去的好人个数,有没有坏人能出去 
	ll sum=0;//能出去的好人个数 
	bool f=1;//因为只要有坏人出去就不行,直接用bool 
	memset(vis,0,sizeof vis);//每次清空 
	while(!q.empty()){
		ll x=q.front().first,y=q.front().second;//取点 
		q.pop();
		if(vis[x][y])continue;
		vis[x][y]=1;//标记已经来过 
		if(mp[x][y] == 'G')sum++;
		if(mp[x][y] == 'B')f=0;
		for(ll i = 0 ; i < 4 ; i ++){//查询下一个点 
			ll tx = x + dir[i][0];
			ll ty = y + dir[i][1];
			if(tx < 1 || ty < 1 || tx > n || ty > m || vis[tx][ty] || mp[tx][ty] == '#')continue;
			q.push({tx,ty});
		}
	}
	return sum == g && f;//好人全部能出去,没有坏人出去 
}

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"

const ll N = 1e2+7;
ll n,m,g;
char mp[N][N];//存图 
bool vis[N][N];//标记走过的路 
ll dir[4][2]={0,1,1,0,0,-1,-1,0};//方向数组 
queue<pair<ll,ll> >q;//接下来要走的地方 

bool bfs(){//寻找能出去的好人个数,有没有坏人能出去 
	ll sum=0;//能出去的好人个数 
	bool f=1;//因为只要有坏人出去就不行,直接用bool 
	memset(vis,0,sizeof vis);//每次清空 
	while(!q.empty()){
		ll x=q.front().first,y=q.front().second;//取点 
		q.pop();
		if(vis[x][y])continue;
		vis[x][y]=1;//标记已经来过 
		if(mp[x][y] == 'G')sum++;
		if(mp[x][y] == 'B')f=0;
		for(ll i = 0 ; i < 4 ; i ++){//查询下一个点 
			ll tx = x + dir[i][0];
			ll ty = y + dir[i][1];
			if(tx < 1 || ty < 1 || tx > n || ty > m || vis[tx][ty] || mp[tx][ty] == '#')continue;
			q.push({tx,ty});
		}
	}
	return sum == g && f;//好人全部能出去,没有坏人出去 
}

void solve(){
	cin >> n >> m;
	memset(mp,'#',sizeof mp);
	g=0;//好人的个数重置 
	for(ll i = 1 ; i <= n ; i ++)
		for(ll j = 1 ; j <= m ; j ++){
			cin >> mp[i][j];
			if(mp[i][j] == 'G')g++;
		}
	for(ll i = 1 ; i <= n ; i ++)
		for(ll j = 1 ; j <= m ; j ++)
			if(mp[i][j] == 'B')
				for(ll k = 0 ; k < 4 ; k ++){
					ll x = i + dir[k][0];
					ll y = j + dir[k][1];
					if(x < 1 || y < 1 || x > n || y > m || mp[x][y] != '.')continue;
					mp[x][y]='#';
				}
	if(mp[n][m] == '#'){//如果终点被封上了 
		g == 0 ? cout << "Yes" << endl : cout << "No" << endl;
		return;
	}
	q.push({n,m});
	bfs() ? cout << "Yes" << endl : cout << "No" << endl;
	return;
}

int main(){
	ll t=1;cin >> t;
	while(t --)solve();
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/537603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器配置选择详细指导

云服务器配置如何选择&#xff1f;云服务器配置包括CPU内存、公网带宽和系统盘&#xff0c;阿里云服务器还要注意云服务器规格及轻量应用服务器的选择&#xff0c;云服务器吧以阿里云服务器为例来详细说下小白用户选择云服务器配置攻略&#xff1a; 一、准备工作 如果你不注册…

文献速递:深度学习肝脏肿瘤诊断---基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习

Title 题目 Deep learning for diferential diagnosisof malignant hepatic tumors based on multi-phase contrast-enhanced CT and clinical data 基于多相增强 CT 和临床数据的恶性肝肿瘤鉴别诊断深度学习 Abstract 摘要 Liver cancer remains the leading cause of can…

2024 年 AI代码助手AI Coding Assistant智能工具

AI代码助手&#xff08;AI Coding Assistant&#xff09;是一种利用人工智能帮助开发人员更快、更准确地编写代码的软件工具。 它可以通过根据提示生成代码或在你实时编写代码时建议自动完成代码来实现此目的。 以下是AI代码助手可以做的一些事情&#xff1a; 与你使用的流行代…

指令集体系简读

这一部分&#xff0c;采用问答的方式来进行梳理&#xff1b; 什么是指令集体系&#xff1f; 指令集体系(Instruction Set Architecture,ISA)是规定处理器的外在行为的一系列内容的统称&#xff0c;它包括&#xff1a; 基本数据类型(data types)、指令(instructions)、寄存器…

Socks5代理IP如何使用?详细教程解析

当我们在互联网上浏览网页、下载文件或者进行在线活动时&#xff0c;隐私和安全问题常常被提及。在这样的环境下&#xff0c;一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法&#xff0c;帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

使用了代理IP怎么还会被封?代理IP到底有没有效果?

代理IP作为一种网络工具&#xff0c;被广泛应用于各种场景&#xff0c;例如网络爬虫、海外购物、规避地区限制等。然而&#xff0c;很多用户在使用代理IP的过程中却发现自己的账号被封禁&#xff0c;这让他们不禁产生疑问&#xff1a;使用了代理IP怎么还会被封&#xff1f;代理…

MXNet安装:专业指南与深度解析

一、引言 MXNet是一个高效且灵活的深度学习框架&#xff0c;它支持多种编程语言和平台&#xff0c;并提供了丰富的深度学习算法和工具。随着深度学习技术的广泛应用&#xff0c;MXNet因其出色的性能和易用性受到了越来越多开发者和研究人员的青睐。本文将详细介绍MXNet的安装过…

YOLOV5 分类:利用yolov5进行图像分类

1、前言 之前介绍了yolov5的目标检测示例,这次将介绍yolov5的分类展示 目标检测:YOLOv5 项目:训练代码和参数详细介绍(train)_yolov5训练代码的详解-CSDN博客 yolov5和其他网络的性能对比 yolov5分类的代码部分在这 2、数据集准备 yolov5分类的数据集就是常规的摆放方式…

SpringCloudAlibabaSeate处理分布式事务

SpringCloudAlibabaSeate处理分布式事务 1、部分面试题 微服务boot/cloud做的项目&#xff0c;你不可能只有一个数据库吧&#xff1f;那么多个数据库之间如何处理分布式事务的&#xff1f; 一个场景&#xff1a;在订单支付成功后&#xff0c;交易中心会调用订单中心的服务把订…

如何在公网环境远程管理内网Windows系统部署的MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

DC-DC 5V2A异步升压5V2A输出电源升压芯片2.6-5.5V供电

一、芯片概述&#xff1a; FP6298是一个电流模式升压DC-DC转换器。它是内置PWM电路0.08Ω功率MOSFET&#xff0c;使该调节器高效。内部补偿网络还可以最小化多达6个外部组件计数。误差放大器的非反相输入连接到一个0.6V的精度参考电压&#xff0c;内部的软启动功能可以降低涌入…

【2024最新博客美化教程重置版】在网页中使用L2Dwidget二次元可动人物前端插件,让动漫美女伴随你左右!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 L2Dwidget 二次…

Java 中文官方教程 2022 版(三十四)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 长期持久性 原文&#xff1a;docs.oracle.com/javase/tutorial/javabeans/advanced/longpersistence.html 长期持久性是一种模型&#xff0c;可以将 bean 保存为 XML 格式。 有关 XML 格式和如何为非 be…

SQL执行流程图文分析:从连接到执行的全貌

SQL执行总流程 下面就是 MySQL 执行一条 SQL 查询语句的流程&#xff0c;也从图中可以看到 MySQL 内部架构里的各个功能模块。 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在…

员工管理系统!(免费获取源码)

​今天给大家分享一套基于SpringbootVue的员工管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文末自取) 一、系统运行图 1、登陆页面 2、后台管理页面 3、职工管理 4、请假审批管理 二、系统搭建视频教程 源码免费领取方式 后台私信回复员工即可…

从大量数据到大数据,King’s SDMS仪器数据采集及科学数据管理系统的应用

对于实验室或检测机构&#xff0c;仪器设备是所有业务开展的基础&#xff0c;数据则是核心命脉&#xff0c;而传统的仪器设备原始数据收集方式&#xff0c;效率低耗时长、操作流程不规范、不易保存与查找、错误率高、易篡改等成了制约检测机构持续高速发展的瓶颈和弊端&#xf…

kvm虚拟机磁盘镜像加密

一、qcow2的aes加密 低版本的qemu能够支持对qcow2文件进行aes加密的方式&#xff0c;例如对一个已经存在的磁盘文件test.qcow2&#xff0c;可以将其转换为经过加密的qcow2文件。 qemu-img convert -O qcow2 --object secret,idsec0,data123456 -o encryptionon,encrypt.key-s…

springboot发送邮件

很久之前就想写一个总结的&#xff0c;一直没写&#xff0c;今天刚好又碰见了发送邮箱验证码的需求&#xff0c;刚好记录一波 一.核心依赖如下&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…

Python 全栈体系【四阶】(二十九)

第五章 深度学习 四、TensorFlow 5. 张量及基本运算 5.1 张量的阶与形状 阶&#xff1a;张量的维度&#xff08;数方括号的层数&#xff09; 形状表示方法 0 维&#xff1a;( )1 维&#xff1a;(5)&#xff0c;1 行 5 个元素2 维&#xff1a;(2,3)&#xff0c;2 行 3 列3…