P1451 求细胞数量 题解

news2024/12/23 13:16:30

文章目录

    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 数据范围与提示
    • 思路及部分实现
    • 完整代码

题目描述

一矩形阵列由数字 0 0 0 9 9 9 组成,数字 1 1 1 9 9 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

输入格式

第一行两个整数代表矩阵大小 n n n m m m

接下来 n n n 行,每行一个长度为 m m m 的只含字符 09 的字符串,代表这个 n × m n \times m n×m 的矩阵。

输出格式

一行一个整数代表细胞个数。

样例

样例输入

4 10
0234500067
1034560500
2045600671
0000000089

样例输出

4

数据范围与提示

对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m ≤ 100 1 \le n,m \le 100 1n,m100

题目传送门

思路及部分实现

笔者直接考虑用搜索完成此题,只需在搜索过程中把经过的每一点标记避免重复计算同一细胞即可。

  • 枚举每个点,如果当前点没有被搜索过(即没被标记过)就将计数器加一,然后从当前点展开搜索
  • 反之,如果当前点被搜索过,直接进入下一次循环,无需做特殊处理

代码实现如下:

for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
		if(!fl[i][j]) cnt++,search(i,j);

笔者对于这道题更倾向于深度优先搜索 DFS \text{DFS} DFS,当然用广度优先搜索 BFS \text{BFS} BFS 也完全没问题。代码实现见完整代码。

完整代码

第一种,深度优先搜索写法。以下代码在洛谷评测中 30 ms 30\text{ms} 30ms 通过此题。

#include<iostream>
using namespace std;
int n,m;
bool fl[101][101];
void dfs(int x,int y){
	if(fl[x][y]||x<1||y<1||x>n||y>m) return ;
	fl[x][y]=true;
	dfs(x,y+1),dfs(x,y-1),dfs(x+1,y),dfs(x-1,y);
}
int main()
{
	int cnt=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			char ch;
			scanf(" %c",&ch);
			if(ch=='0') fl[i][j]=true;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(!fl[i][j]) cnt++,dfs(i,j);
	printf("%d",cnt);
	return 0;
} 

第二种,广度优先搜索写法。以下代码在洛谷评测中 34 ms 34\text{ms} 34ms 通过此题。

#include<queue>
#include<iostream>
using namespace std;
struct node{
	int x,y;
};
int n,m;
bool fl[101][101];
void bfs(int o,int r){
	queue<node> q;
	q.push((node){o,r});
	while(!q.empty()){
		node T=q.front();q.pop();
		if(T.x<1||T.y<1||T.x>n||T.y>m||fl[T.x][T.y]) continue;
		fl[T.x][T.y]=true;
		q.push((node){T.x+1,T.y});
		q.push((node){T.x-1,T.y});
		q.push((node){T.x,T.y+1});
		q.push((node){T.x,T.y-1});
	}
}
int main()
{
	int cnt=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			char ch;scanf(" %c",&ch);
			if(ch=='0') fl[i][j]=true;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(!fl[i][j]) cnt++,bfs(i,j);
	printf("%d",cnt);
	return 0;
} 




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

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

相关文章

10.23归并排序

课上 归并排序 最大时&#xff0c;就是两个都是完全倒序&#xff0c;但注意一定有一个序列先用完&#xff0c;此时剩一个序列只有一个元素&#xff0c;不用比较&#xff0c;直接加入&#xff0c;所以就是nn-1, 最小时&#xff0c;是都是完全有序&#xff0c;且一个序列中的元…

ZYNQ移植ARM CMSIS_DSP库

移植方法 Vitis中新建一个Application Project&#xff0c;选择HelloWord模板。按下面步骤移植CMSIS_DSP&#xff1a; 下载CMSIS_DSP&#xff0c;拷贝如下文件夹到Vitis工程&#xff1a; SourceIncludePrivateIncludeComputeLibrary (only if you target Neon) 对Source路径下…

古铜色的P1.2直径1.2米无边圆形(饼)创意LED显示屏绽放上海苏河湾万象天地展厅

我们公司的圆形LED显示屏是专门根据业主的独特需求开模定制的。为了满足各种不同的规格和要求&#xff0c;我们已经成功地对多个点间距与直径进行了精密的开模设计&#xff0c;且工艺技术成熟稳定&#xff0c;能够保证快速的交期。 这种圆形LED显示屏是通过独特的开模定制方式…

基础课6——计算机视觉

1.计算机视觉的概念与原理 1.1概念 计算机视觉&#xff08;CV&#xff09;是人工智能的一个重要发展领域&#xff0c;属于计算机科学的一个分支&#xff0c;它企图让计算机能像人类一样通过视觉来获取和理解信息。计算机视觉的应用非常广泛&#xff0c;包括但不限于图像识别、…

HIMA F3236 F7553 面向制造业的可视化人工智能

HIMA F3236 F7553 面向制造业的可视化人工智能 近年来&#xff0c;出现了一种分析高触摸制造的新解决方案:基于图像传感器数据的人工智能驱动分析。与时间和运动研究或Gemba Walks不同&#xff0c;分析从不停止&#xff0c;系统更不容易出现人为错误和偏差。 直到最近&#…

Vue3获取proxy对象的值而不是引用的方式

情景 vue3中定义一个响应式对象&#xff1a; let obj1 reactive({userName:"tom", age:5, hobby:{a:"av",b:"bv"}}); 打印obj1&#xff0c;结果为proxy对象 定义第二个响应式对象&#xff1a; let obj2 reactive({userName:"",ag…

2023年中国二手车交易行业发展历程及趋势分析:整体规模仍保持稳定增长[图]

二手车交易主要内容包括&#xff1a;二手车评估前期工作、技术状况鉴定、寄卖、置换业务、价格评估、交易实务。主要手续包括车务手续、车辆保养维修手续、税费手续。 二手车交易行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 未来&#xff0c;二…

PySide6/PyQt6宝典:新手问题一网打尽!

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 常用cmd命令📝 如何使用ui文件📝 主窗口如何调用其它窗口📝 后台执行任务(防止界面卡死)📝 信号与槽📝 如何停止循环任务📝 未完...⚓️ 相关链接 ⚓️💋💋💋💋💋💋📖 介绍 📖 本文

typeerror: Cannot read properties of null (reading ‘emitsOptions‘)报错原因及解决方法

可能导致的原因以及解决方法&#xff1a; 在父组件中子组件名称没有正确引入&#xff1a;检查组件名称和子组件是否正确定义props以及emit的使用在一个空值上去访问属性&#xff1a;可以使用可选链操作符&#xff08;&#xff1f;&#xff09;去检查对象是否为空v-if指令的判断…

零信任特权访问管理

零信任特权访问管理 &#xff08;PAM&#xff09; 是一个安全框架&#xff0c;它结合了基本的零信任原则来保护特权帐户和资源。它要求对尝试访问企业资源的所有用户进行持续验证和授权&#xff0c;以防止未经授权的访问。此强制过程可确保默认情况下永远不会信任用户和设备&am…

MacOS Mojave(苹果14系统) v10.14.6中文离线安装包

MacOS Mojave是一款先进的操作系统&#xff0c;它拥有诸多出色的特性。其中&#xff0c;夜间模式可以根据时间或用户设置自动切换&#xff0c;改变了UI、壁纸和窗口的样式&#xff0c;使界面在夜晚使用时更为舒适。另外&#xff0c;新的堆栈和群组功能让用户能更方便地分类和整…

【BigDecima】不可变的,任意精度的有符号十进制数。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ BigDecima BigDecima作用及原理 BigDecima作用…

经典卷积神经网络 - LeNet

该模型用于手写的数字识别。 LeNet模型包含了多个卷积层和池化层&#xff0c;以及最后的全连接层用于分类。其中&#xff0c;每个卷积层都包含了一个卷积操作和一个非线性激活函数&#xff0c;用于提取输入图像的特征。池化层则用于缩小特征图的尺寸&#xff0c;减少模型参数和…

Go运算操作符全解与实战:编写更高效的代码!

本文全面探讨了Go语言中的各类运算操作符&#xff0c;从基础的数学和位运算到逻辑和特殊运算符。文章在深入解析每一种运算操作符的工作原理、应用场景和注意事项&#xff0c;以帮助开发者编写更高效、健壮和可读的Go代码。 简介 Go语言&#xff0c;作为一种现代的编程语言&am…

Python实战小项目分享

Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路&#xff0c;可以选择感兴趣的项目进行实践&#xff0c;加深对Python编程的理解和掌握。在实践过程中&…

CRM销售管理系统是如何进行数据分析的

数据分析可以帮助销售人员挖掘潜在问题&#xff0c;知晓哪些渠道可以带来更多的客户&#xff0c;为日常的销售工作提供科学依据。当然&#xff0c;要做好数据分析不是一件简单的事&#xff0c;利用好销售管理系统是关键。那么CRM销售管理系统是如何进行数据分析的呢&#xff1f…

TCP网络通信

package TCP1;//完成TCP通信的 实现发1收1import java.io.DataOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class Client {public static void main(String[] args)throws Ex…

计算属性和侦听属性以及方法有什么区别,本文以计算一个数组中所有偶数的和为例

计算属性(computed)是Vue中的一个特殊属性&#xff0c;它根据依赖的数据进行计算&#xff0c;并返回计算结果。计算属性的值会根据其相关依赖项的变化而自动更新&#xff0c;类似于一个响应式的缓存。计算属性可以用来处理一些复杂的逻辑计算&#xff0c;避免在模板中编写过多的…

asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net网球馆计费管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 aspnet网球馆计费管理系统1 二、…

windows系统mysql服务启动失败

​ 原因 电脑重启navicat连接mysql失败&#xff0c;在电脑-管理-服务没有mysql服务 解决方案 找到mysql的安装目录进入bin目录 执行mysqld --install 进行重新安装 提示服务安装成功 net start mysql mysql 启动成功 ​