HJ159 没挡住洪水

  • 题目
  • 题解(10)
  • 讨论(10)
  • 排行

简单 通过率:26.80% 时间限制:1秒 空间限制:256M

知识点广度优先搜索(BFS)

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

吴铭市近日洪水肆虐,然而市政部门紧急在若干方格上砌起围墙是豆腐渣工程,被洪水中的强腐蚀性物质一氧化二氢分解了,只剩下了用 `#` 表示的空地。

地图用大小为 N \times N 的字符矩阵描述:`'.'` 表示已经被洪水淹没的区域,`'#'` 表示空地。四联通的 `'#'` 组成一个区域

聪明睿智的吴铭市防洪抗灾紧急委员会官员在全市防洪抗灾紧急会议上指出,在接下来的一天中,洪水仍将上涨,所有与已经被洪水淹没的区域相邻(上下左右方向)的空地格子都会被淹没 。请计算在此次上涨后,吴铭市中将有多少个区域被完全淹没。

输入描述:

第一行输入整数 N(1≦N≦1000)N(1≦N≦1000)。

随后 NN 行,每行 NN 个字符构成吴铭市的地图,只含 `'.'` 与 `'#'`。已知边界四条边全部为已经被洪水淹没的区域。

输出描述:

输出一个整数,表示一天后会完全消失的空地区域数量。

示例1

输入:

复制代码
1
.

复制输出:

复制代码
0
cpp 复制代码
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
//四个方向
vector<vector<int>> direction = { {1,0},{0,1},{-1,0},{0,-1} };

int bfs(vector<vector<char>>& map, pair<int,int> point)
{
	int rows = map.size();
	int cols = map[0].size();

	queue<pair<int, int>> q;
	q.push(point);

	int xn = 0, yn = 0;
	bool all_beside_water = true;//是否全与水相邻,即是否被完全淹没

	while (!q.empty())
	{
		bool beside_water = false;
		auto [x, y] = q.front();
		map[x][y] = '*';//已访问过用*标记
		q.pop();

		for (auto dir : direction)
		{
			xn = x + dir[0];
			yn = y + dir[1];
			if (map[xn][yn] == '.'||xn < 0 || xn >= rows || yn < 0 || yn > cols)//与水相邻
			{
				beside_water = true;
			}
			if (xn >= 0 && xn < rows && yn >= 0 && yn < cols&&map[xn][yn] == '#')//相邻空地加入队列
			{
				q.push({ xn,yn });
			}
		}
		if (beside_water == false)//只要有一个与水不相邻,即不完全与水相邻
			all_beside_water = false;
	}
	if (all_beside_water == false)//不完全与水相邻,不会被水淹没
		return 0;
	else
		return 1;
}

int main()
{
	int n;
	cin >> n;
	vector<vector<char>> map(n, vector<char>(n));
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> map[i][j];
		}
	}

	int count = 0;

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (map[i][j] == '#')//寻找空地,bfs遍历
				count += bfs(map, { i,j });
		}
	}
	cout << count;
}
相关推荐
FakeOccupational3 小时前
【数学 密码学】量子通信:光的偏振&极化的量子不确定性特性 + 量子密钥分发 BB84算法步骤
算法·密码学
ZhengEnCi5 小时前
S10-蓝桥杯 17822 乐乐的积木塔
算法
贾斯汀玛尔斯5 小时前
每天学一个算法--拓扑排序(Topological Sort)
算法·深度优先
t***5445 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
大龄程序员狗哥5 小时前
第25篇:Q-Learning算法解析——强化学习中的经典“价值”学习(原理解析)
人工智能·学习·算法
exp_add35 小时前
质数相关知识
算法
CoderCodingNo5 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
小辉同志6 小时前
215. 数组中的第K个最大元素
数据结构·算法·leetcode··快速选择
小O的算法实验室6 小时前
2025年IEEE TITS,基于矩阵的进化计算+面向无线传感器网络数据收集无人机路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
OidEncoder6 小时前
编码器分辨率与机械精度的关系
人工智能·算法·机器人·自动化