P1506 拯救oibh总部(BFS洪水灌溉)

news2024/10/5 18:26:03

题目:

样例1:

输入
4 5
00000
00*00
0*0*0
00*00
输出
1

 样例2:

输入
5 5
*****
*0*0*
**0**
*0*0*
*****
输出
5

思路:

        洪水灌溉,思路:给该图外面包围一圈可遍历的的点,作为引流灌溉。

BFS外围一点,即可顺流而下的灌溉下去。

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define mk make_pair
#define x first
#define y second
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;
using PII = pair<int,int>;
int n,m;
umap<int,string>g;// 地图

int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

inline bool isRun(int x,int y)
{
	return (x >= 0 && x < n && y >= 0 &&y < m && g[x][y] == '0');
}

inline void BFS(int tx,int ty)
{
	queue<PII>q;
	
	q.emplace(mk(tx,ty));
	
	while(q.size())
	{
		PII now = q.front();
		q.pop();
		
		g[now.x][now.y] = '1';	// 标记被灌溉的点
		
		for(int i = 0;i < 4;++i)
		{
			int bx = now.x + dx[i];
			int by = now.y + dy[i];
			if(isRun(bx,by))
			{
				g[bx][by] = '1';	// 标记被灌溉的点
				q.emplace(mk(bx,by));
			}
		}
	}
}


inline void solve()
{
	cin >> n >> m;
	m += 2;	// 由于建了外圈,所以宽度 +2
	
	// 建立上下外圈
	for(int i = 0;i < m;++i)
	{
		g[0] += "0";
		g[n + 1] += "0";
	} 
	
	for(int i = 1;i <= n;++i)
	{
		// 这里是输入地图后,建立两边的外圈
		string s;
		cin >> s;
		g[i] = "0" + s + "0";
	}	
	
	n += 2;	// 由于建立了上下外圈,所以高 + 2
	
	BFS(0,0);	// 引流灌溉
	
	// 获取未被洪水淹没的重要区域
	int ans = 0;
	for(int i = 0;i < n;++i)
	{
		for(int j = 0;j < m;++j)
		{
			if(g[i][j] == '0') ++ans;
		}
	}
	
	cout << ans << endl;
}

int main()
{
//	freopen("a.txt", "r", stdin);
	IOS;
	int _t = 1;
//	cin >> _t;
	while (_t--)
	{
		solve();
	}

	return 0;
}

最后提交:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python自动化测试(3)- 自动化框架及工具

1、概述 手续的关于测试的方法论&#xff0c;都是建立在之前的文章里面提到的观点&#xff1a; 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍。 本系列选择的测试语言是 python 脚本语言。由于其官…

node项目调试

node 版本要在16.8版本或以上&#xff0c;12点几没有这个调试功能 ctrlshiftp debug: toggle auto attach 将自动附加打开&#xff0c;打断点&#xff0c;然后执行命令 node --inspect ./bin/mvc.js,然后就进入调试

MySQL索引事务存储引擎

索引&#xff1a;是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

TensorFlow学习笔记--(2)张量的常用运算函数

张量的取值函数 求张量的平均值: tf.reduce.mean(%张量名%)求张量的最小值:tf.reduce_min(%张量名%)求张量的最大值:tf.reduce_max(%张量名%)求张量的和:tf.reduce_sum(%张量名%)其次,对于上述所有操作 都可在函数后添加一个新的参数 axis%维度% axis0 代表第一维度 axis1 代表…

【Unity】思考方式与构造 | 碰撞器/刚体/预设/组件

《Unity神技大人炼成记》第二章-思考方式与构造 Unity版本&#xff1a;2019.4.23f1c1 相关文章&#xff1a;第一章&#xff1a;开天辟地&#xff08;场景搭建-天空 山脉 草木 湖泊&#xff09; 粉色矩形是截图后添加&#xff0c;以便辨认操作位置有些步骤只是为了体现一些属性…

网络安全入门建议

前言 最近有很多人问我&#xff0c;我想自学一些安全相关的技术&#xff0c;有没有适合入门阶段学习的web安全书籍。说到Web安全书籍&#xff0c;这几年其实是一种百家齐放的状态&#xff0c;不断有优秀的书籍出版&#xff0c;那这里就尽可能少地整理几本我阅读过的Web安全入门…

【11】使用透视投影建立一个3D空间的测试

核心操作&#xff1a; 1.proj view model 这三个矩阵 glm::mat4 mvp m_Proj * m_View * model; m_Shader->Bind(); m_Shader->SetUniformMat4f("u_MVP", mvp);着色器里面就&#xff1a; proj:投影矩阵&#xff0c;可以选择正交投影&#xff0c;或者透视投影…

JVS低代码表单自定义按钮的使用说明和操作示例

在普通的表单设计中&#xff0c;虽然自带的【提交】、【重置】、【取消】按钮可以满足基本操作需求&#xff0c;但在面对更多复杂的业务场景时&#xff0c;这些按钮的显示控制就显得有些力不从心。为了更好地满足用户在表单操作过程中的个性化需求&#xff0c;JVS低代码推出了表…

关于Web端 —— UI自动化测试

在手工测试阶段&#xff0c;针对项目输出了测试用例&#xff0c;如果这些测试用例需要在版本迭代的过程中&#xff0c;需要进行回归测试&#xff0c;通过手工重复地执行测试用例&#xff0c;将会耗费大量的人力。 为此应运而生就有了自动化测试&#xff0c;通过使用自动化工具…

MyBatis-plus超神用法--一文带你玩转MP

前言 MyBatis-Plus是一个基于MyBatis的增强工具&#xff0c;提供了很多便捷的功能和增强的功能&#xff0c;以下是一些MyBatis-Plus的超神用法&#xff1a; 通用Mapper&#xff1a;MyBatis-Plus提供了通用Mapper的功能&#xff0c;可以通过继承BaseMapper接口&#xff0c;实现…

算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素

文章目录 对应力扣的题目链接思路分析解决方案 问题一 、239. 滑动窗口最大值 题目链接 &#xff1a; 239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 思路分析 &#xff1a; 1、可能首先想到的是暴力破解 &#xff0c;每一个区间&#xff0c;遍历一遍&#xf…

tracert命令

tracert tracert (跟踪路由)使路由跟踪使用程序&#xff0c;用于确定IP数据包访问目标所采用的路径。Tracert命令用IP生存时间&#xff08;TTL&#xff09;字段和ICMP错误消息&#xff0c;来确定从一个主机网络上其他主机的路由。 类似与Linux的traceroute 命令 命令格式 t…

PHP 在线学习平台系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线学习平台系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线学习平台系统1 代码 https://download.csdn.net/download/qq_41…

响应式成人高考自考教育机构网站模板源码下载带后台

模板信息&#xff1a; 模板编号&#xff1a;30558 模板编码&#xff1a;UTF8 模板分类&#xff1a;学校、教育、培训、科研 适合行业&#xff1a;教育机构类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVC…

LeetCode----149. 直线上最多的点数

 题目 给你一个数组 points &#xff0c;其中 points[i] [ x i x_i xi​, y i y_i yi​] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1&#xff1a; 输入&#xff1a;points [[1,1],[2,2],[3,3]] 输出&#xff1a;3 示例 2&#xff1a; 输入…

【通信原理】第三章 随机过程——例题

一、随机过程 1. 数学特征 ① 随机信号&#xff08;三角函数表达式&#xff09; ② 随机信号&#xff08;求和表达式&#xff09; 2. 功率谱密度 ① 相位确定&#xff0c;求功率谱密度 ② 已知相位分布&#xff0c;求功率谱密度 ③ 信号为两信号之和&#xff0c;求功率谱密度…

闲置电脑做什么副业赚钱?盘点如何利用电脑赚钱的方法

对于很多人来说&#xff0c;手机的强大功能使闲置的电脑被遗忘在角落。虽然现在手机已经取代电脑的很多用途。但是实际上&#xff0c;网络上还是有很多项目是手机不能展开的&#xff0c;而电脑方方面面都可以&#xff0c;所以&#xff0c;只要你愿意花些时间和精力&#xff0c;…

ConcurrentHashMap 源码解析

目录 一. 前言 二. 源码解析 2.1. 类结构 2.2. 基本属性 2.3. 构造方法 2.4. 增加元素 2.4.1. initTable() 2.4.2. helpTransfer() 2.4.3. transfer() 2.4.4. treeifyBin() 2.4.5. addCount() 2.5. 获取元素 2.6. remove() & replace() 2.7. clear() 2.8. s…

研发管理和项目管理有哪些痛点

研发管理和项目管理有哪些痛点 研发管理和项目管理有&#xff1a;1.项目进度把控难&#xff1b;2.绩效考核难&#xff1b;3.部门信息不同步&#xff1b;4.人力资源不均衡&#xff1b;5.需求管理难。项目进度把控难是研发管理和项目管理中的名列前茅痛点&#xff0c;要解决该问题…

引用类型;强引用;软引用;弱引用和虚引用

概述 平时在编写代码的时候内存都是由jvm管理&#xff0c;对象的回收也是jvm在管理&#xff1b; 但是有些时候jvm无法回收对象&#xff0c;最后就会抛出oom异常. 那么那些回收不了的对象肯定有区别于能回收的对象&#xff1b; 先上一波引用类型介绍 强引用 比如平常我们直…