AcWing算法提高课-2.1.2城堡问题

news2024/9/21 12:34:15

宣传一下算法提高课整理 <—

CSDN个人主页:更好的阅读体验 <—

f4e0159841ab450d861dde9e8fb5ba0d.gif

题目传送门点这里

题目描述

    1   2   3   4   5   6   7  
   #############################
 1 #   |   #   |   #   |   |   #
   #####---#####---#---#####---#
 2 #   #   |   #   #   #   #   #
   #---#####---#####---#####---#
 3 #   |   |   #   #   #   #   #
   #---#########---#####---#---#
 4 #   #   |   |   |   |   #   #
   #############################
           (图 1)

   #  = Wall   
   |  = No wall
   -  = No wall

   方向:上北下南左西右东

输入格式

图1是一个城堡的地形图。

请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。

城堡被分割成 m ∗ n m∗n mn
个方格区域,每个方格区域可以有0~4面墙。

注意:墙体厚度忽略不计。

输出格式

第一行包含两个整数 m m m n n n ,分别表示城堡南北方向的长度和东西方向的长度。

接下来 m m m 行,每行包含 n n n 个整数,每个整数都表示平面图对应位置的方块的墙的特征。

每个方块中墙的特征由数字 P P P 来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙, P P P 为该方块包含墙的数字之和。

例如,如果一个方块的 P P P 为3,则 3 = 1 + 2,该方块包含西墙和北墙。

城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。

输入的数据保证城堡至少有两个房间。

数据范围

1 ≤ m , n ≤ 50 , 1≤m,n≤50, 1m,n50,
0 ≤ P ≤ 15 0≤P≤15 0P15

样例输入

4 7 
11 6 11 6 3 10 6 
7 9 6 13 5 15 5 
1 10 12 7 13 7 5 
13 11 10 8 10 12 13 

样例输出

5
9

思路

这道题除了是用数字表示每个房间的墙的方向,其它的与上一题 池塘计数 类似。
处理墙的方向,我们想到把 P P P二进制 表示,分成 1 , 2 , 4 , 8 1,2,4,8 1,2,4,8 四面墙。

回忆一下怎么知道一个数 x x x 二进制表示的第 k k k 位:
x >> k & 1

熟悉了这部,就可以开始做题了。细节部分看代码。

AC Code

C + + C++ C++

#include <iostream>
#include <queue>

using namespace std;

typedef pair<int, int> PII;

const int N = 55;
int dx[] = {0, -1, 0, 1};
int dy[] = {-1, 0, 1, 0}; // 四方向偏移量

int n, m;
int a[N][N]; // 每个房间p值
bool st[N][N]; // 每个房间有没有被遍历过
int res, Smax; // res表示答案,Smax表示最大面积
queue<PII> q; // BFS的队列,也可以手写

void bfs(int x, int y)
{
	q.push({x, y}); // 起点入队
	st[x][y] = true;
	
	int sum = 1;
	while (q.size())
	{
		auto t = q.front(); // 弹出队头
		q.pop();
		int X = t.first, Y = t.second;
		
		for (int i = 0; i < 4; i ++ )
		{
			int xx = X + dx[i], yy = Y + dy[i]; // 向4个方向扩展
			if (xx < 0 || yy < 0 || xx >= n || yy >= m) continue; // 出界
			if (st[xx][yy] || a[X][Y] >> i & 1) continue; // 有墙
			q.push({xx, yy}); // 否则加入队列
			st[xx][yy] = 1;
			sum ++ ;
		}
	}
	Smax = max(Smax, sum);
}

int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i ++ )
		for (int j = 0; j < m; j ++ )
			scanf("%d", &a[i][j]);
	
	for (int i = 0; i < n; i ++ )
		for (int j = 0; j < m; j ++ )
			if (!st[i][j])
				bfs(i, j), res ++ ;
	
	printf("%d\n%d\n", res, Smax);
	
	return 0;
}

228aa7bed3e021faf24cf8560d3e47bb.gif

最后,如果觉得对您有帮助的话,点个赞再走吧!

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

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

相关文章

微信小程序的【运行机制】解读

文章目录 导语1.微信小程序的运行流程1.1 微信小程序的启动模式1.2 前台与后台的概念1.3 挂起1.4 微信小程序的销毁 微信小程序冷启动的页面从新启动策略 3.微信小程序热启动页面4. 退出状态注意点补充总结 导语 前面我们有章节给大家讲到了&#xff0c;微信小程序的生命周期钩…

Socket网络编程练习(C#)

Socket编程&#xff1a;两个窗口通信 本文章代码来自b站视频&#xff1a;【.Net零基础入门 (老赵主讲)-哔哩哔哩】 https://b23.tv/YI5VWaj 原视频发布者为传智播客&#xff0c;本人根据自己的学习进度对代码做了少许优化 一、网络编程前置知识 1.1 什么是网络编程 网络编程…

【Leetcode每日一刷】动态规划:509. 斐波那契数、322. 零钱兑换、300. 最长递增子序列

博主简介&#xff1a;努力学习的22级计科生博主主页&#xff1a; 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 前言&#xff1a;动规五部曲 以下是《代码随想录》作者总结的动规五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式&#xff0…

什么是异步,同步,并行,串行,单工,半双工,全双工通信

目录 1 如何理解“BUS总线” 2 通信方式的分类 2.1 串行通信Serial communication 2.1.1 异步传输Asynchronous serial communication 2.1.2 同步传输Synchronous serial communication 2.1.3 单工通信Simplex communication 2.1.4 半双工通信Half-duplex communication…

Unity API详解——Matrix4x4类

在脚本中通常用Vector3、QUaternion、Transform等类的属性和方法来对物体进行变换&#xff0c;Matrix4x4类通常在一些比较特殊的地方&#xff0c;如对摄像机的非标准投影变换等。本博客主要介绍Matrix4x4类的一些实例和静态方法。 文章目录 一、Matrix4x4类实例方法1、Multply…

机器学习实战教程(九):模型泛化

泛化能力 模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中&#xff0c;我们通常会将已有的数据集划分为训练集和测试集&#xff0c;使用训练集训练模型&#xff0c;然后使用测试集来评估模型的性能。模型在训练集上表现得好&#xff0c;并不一定能在测…

Redis源码分析(基于Redis7,对比Redis6)

PS: redis7.0.9版本的 1.Redis 源代码分类 1.1Redis 基本的数据结构 基础 Redis对象object.c字符串t_string.c列表t_list.c字典t_hash.c集合及有序集合t_set.c和z_set.c数据流 t_stream 底层实现结构 listpack.c 和 rax.c 简单动态字符串 sds.c整数集合 intset.c压缩列表 z…

【dp】最长递增子序列

文章目录 方法一&#xff1a;动态规划方法二&#xff1a;贪心 二分查找构造最长递增子序列 方法一&#xff1a;动态规划 dp[i]&#xff1a;末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1&#xff0c;若遍历到的元素小于当前值arr[i]&#xff0c;表示当前值arr[i]可以和…

国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义

国考省考行测&#xff1a;词句理解&#xff0c;词的对象指代&#xff0c;就近原则&#xff0c;主语一致法&#xff0c;语意语境分析上下文找出指代含义 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国…

3年100亿!苏宁易购与倍科达成重磅战略合作

紧抓消费复苏机遇&#xff0c;家电行业迎来重磅合作。4月20日&#xff0c;苏宁易购与国际知名家电品牌倍科在南京召开战略合作发布会&#xff0c;共同宣布升级战略合作伙伴关系。双方将围绕3年100亿战略合作目标开展独家品牌授权、发起“BIS”计划、打造生态开放平台、升级用户…

5G基站外市电改造建设方案 (ppt可编辑)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 外市电定义及分类 定义&#xff1a;由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类&#xff1a; &#xff08;1&#xff09;按电压等级分类 ①提供…

贝叶斯学习(Bayesian Learning)基础篇

Bayesian Learning 前言Motivation and IntroductionThink about Spam Filtering.先验概率后验概率似然度边际概率 Basic assumptionRelevancePractical diculties Bayes TheoremProbability: random eventsBayesian Learning Maximum A Posteriori HypothesisBayes Optimal Cl…

合同管理的6个最佳实践

合同管理不善会使你的合同流程效率低下&#xff0c;并产生负面影响&#xff1a; -收入损失 谈判缓慢、审批延迟和里程碑缺失等低效合同代价高昂。如果没有办法自动跟踪最后期限&#xff0c;并得到通知来执行时间敏感的行动&#xff0c;就会有错过最后期限的风险。 -协作和…

数组【有点难,要注重实战】

目录 1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 3. 数组越界4. 数组作为函数参数4.1 冒泡排序函…

JavaEE-一文了解IP协议与IP地址

目录 IP协议什么是IP地址IP地址的组成动态分配IPNAT机制(网络地址转换) IP协议 IP协议是不可靠、无连接的 不可靠:表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务&#xff0c;任何可靠性的要求都必须由上层来提供&#xff08;如TCP&#xff09;。如果传输过…

【C++|排序算法】冒泡、快排、归并、堆排序算法模版

目录 简介冒泡排序快速排序归并排序堆排序结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国…

字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

摘要 说在前面&#xff0c;面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到几个原因&#xff1a;1、虚报工资&#xff0c;比实际高30%&#xff1b;2、有更好的人选&#xff0c;这个可能性不大&…

反垃圾邮件产品技术要求

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品技术要求 引言 为指导反垃圾邮件产品的研制、生产、测试和评价工作的开展&#xff0c;本标准依据《信息技术 安全技…

基于Spring注解 + MyBatis + Servlet 实现数据库交换的小小Demo

基于Spring注解 MyBatis Servlet 实现数据库交换的小小Demo 第一步 创建web 项目&#xff0c;这一步省略&#xff0c;有不会的可以参考之前发布的文档 第二步 配置pom.xml文件 <dependencies><!-- Spring常用依赖 --><dependency><groupId>org.spr…

SpringCloud --- Eureka注册中心

一、场景 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图 思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c;order-service调用时该…