无污染的独立海域-第13届蓝桥杯省赛Python真题精选

news2024/7/6 17:04:59

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第90讲。

无污染的独立海域,本题是2022年4月23日举办的第13届蓝桥杯青少组Python编程省赛真题编程部分第5题,13届一共举办了两次省赛,这是第二次省赛。题目要求对于给定的N * M个方格数据,请编程计算没被污染的独立海域的数量。

先来看看题目的要求吧。

一.题目说明

时间限制:3000MS

内存限制:589824K8

编程实现:

有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)

例如:N = 4,M = 5,4 * 5的海域中,已被污染海域和没被污染的海域如下图:

图片

这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。

输入描述:

第一行输入两个正整数N和M,N表示矩阵方格的行,M表示矩阵方格的列,N和M之间以一个英文逗号隔开

第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)

输出描述:

输出一个整数,表示N * M的海域中有几块是没被污染的独立海域

样例输入:

4,5

1,1,0,0,0

1,0,1,0,0

1,0,0,0,0

1,1,0,1,1

样例输出:

3

评分标准:

  • 20分:能正确输出一组数据;

  • 20分:能正确输出两组数据;

  • 20分:能正确输出三组数据;

  • 20分:能正确输出四组数据。

二.思路分析

这是一道经典的算法题,涉及的知识点包括循环、条件、二维列表和DFS算法等。

又是经典的岛屿问题,和4月17日第一次省赛的第6题如出一辙,可以参考《独立农作物区域-第13届蓝桥杯省赛Python真题精选》这篇教程。

图片

解决这类问题的通用方法就是DFS算法,DFS算法的核心思想是尽可能深地探索图的分支,直到无法继续为止,然后回溯并探索其他分支,在代码层面,主要是通过递归来实现。

图片

具体的过程分析,这里就不再赘述了,可以直接参考农作物区域那道题。

此处,我要强调的是在解决岛屿问题时,DFS函数的抽象意义。抛开具体的代码层面,我们要深入理解DFS函数到底干了些什么?

简单来说,就两件事情,如下:

  • 如果当前单元格是岛屿,就使用递归算法,找到与之相连的岛屿单元格;

  • 每找到一个岛屿单元格,就将其淹掉,变成水域;

所以,DFS函数通常也叫淹掉函数,或者叫感染函数,就像病毒一样,一旦找到一个健康的细胞,就迅速地将其感染,并立即扩散到周围所有的细胞。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分两步编写程序:

  • 定义DFS函数

  • 统计无污染海域数量

1. 定义DFS函数

根据前面的思路分析,定义DFS函数如下:

图片

代码不多,说明两点:

1). 针对给定的单元格,如果i和j越界了,直接返回,如果当前没有被污染,也直接返回,这是递归的两个出口,需要注意顺序,也可以合并为一个;

2). 如果当前是无污染的海域,则先将其淹掉,然后向4个方向递归处理,同样要注意二者的顺序,要先淹掉,避免陷入死循环。

2. 统计无污染海域数量

按照从上到下、从左到右的顺序遍历每一个单元格,代码如下:

图片

代码不多,说明两点:

1). grid是一个n x m的二维列表,先构造一个长度为n的一维列表,然后再使用循环将输入的每一行数字,保存到列表中,构成二维列表;

2). 统计无污染的独立海域时,需要遍历每一个单元格,如果当前区域是独立海域,就说明找到了一块独立海域,将count增加1,然后调用dfs函数将这一片海域都淹掉。

至此,整个程序就全部完成了,你可以输入不同的数据来测试效果啦。

四.总结与思考

本题代码在23行左右,涉及到的知识点包括:

  • 循环语句;

  • 条件语句;

  • 二维列表;

  • 枚举算法;

  • 递归函数;

  • DFS算法;

本题分数为80分,代码不少,难度也比较大。关键点有两个,一是对递归函数的理解和运用,二是对DFS函数的深入理解。

DFS函数是本题的重点,我们不能仅仅停留在具体的代码层面,而是要将其抽象出来,深入理解其作用。建议大家多使用淹掉函数(或感染函数)来描述,形象生动,便于理解。

所有岛屿问题的解决方法都是类似的,而DFS函数是解决这类问题的关键。因此,一定要深入理解并掌握DFS函数的定义及使用。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

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

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

相关文章

余承东在母校西工大毕业典礼演讲:定位决定地位,眼界决定境界。

添加图片注释,不超过 140 字(可选) 【6月29日,西北工业大学2024届本科生毕业典礼暨学位授予仪式隆重举行。典礼上,华为常务董事、终端BG 董事长、智能汽车解决方案BU 董事长余承东作为校友代表致辞,为毕业生…

项目实战--Spring Boot实现三次登录容错功能

一、功能描述 项目设计要求输入三次错误密码后,要求隔段时间才能继续进行登录操作,这里简单记录一下实现思路 二、设计方案 有几个问题需要考虑一下: 1.是只有输错密码才锁定,还是账户名和密码任何一个输错就锁定?2…

gz格式文件16进制分析

接上篇长虹55D3P (海思平台)kernel分区解包ramdisk重新打包-CSDN博客深入研究下gz格式 上篇说到分割得到的ramdisk会有垃圾数据,对于ramdisk无用的垃圾数据可能有其他用途。我们只需要修改ramdisk,就必须准确知道ramdisk的起始地址和结束地址&#xff0…

刚入行的测试新人,应该如何规划自己的职业发展路径?

作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今天…

钡铼BL104智慧环保多个485采集转MQTT无线传输

PLC物联网关BL104是一款专为工业环境设计的先进协议转换网关,其集成了钡铼智能技术和环保多个485采集转MQTT无线传输功能,为工业控制系统提供了高效的数据采集、传输和管理解决方案。 技术规格与功能特点 PLC物联网关BL104采用钡铼智能技术&#xff0c…

k8s部署单节点redis

一、configmap # cat redis-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-single-confignamespace: redis data:redis.conf: |daemonize nobind 0.0.0.0port 6379tcp-backlog 511timeout 0tcp-keepalive 300pidfile /data/redis-server.pidlogfile /d…

顺序表实现——通讯录

前言: 通过对数据结构--顺序表的学习,了解了顺序表的增加数据,删除数据等功能;我们就可以基于顺序表来实现通讯录,接下来就一起来实现通讯录。 首先我们需要存储通讯录中联系人信息,这里创建一个结构体&…

Vue报错:Module not found: Error: Can‘t resolve ‘less-loader‘ in ‘文件地址‘

原因&#xff1a;Webpack无法找到 less-loader 模块&#xff0c;但在<style langless></style>中进行使用。less-loader 是一个Webpack的加载器&#xff0c;它用于将less文件编译成CSS。如果Webpack无法解析这个加载器&#xff0c;它就无法处理less文件&#xff0c…

【C语言内存函数】

目录 1.memcpy 使用 模拟实现 2.memmove 使用 模拟实现 3.memset 使用 4.memcmp 使用 1.memcpy 使用 void * memcpy ( void * destination, const void * source, size_t num );目的地址 源地址 字节数 destination&#xff1a;指向要复制内…

EDA 虚拟机 Synopsys Sentaurus TCAD 2017.09 下载

下载地址&#xff08;制作不易&#xff0c;下载使用需付费&#xff0c;不能接受的请勿下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1327I58gvV1usWSqSrG7KXw?pwdo03i 提取码&#xff1a;o03i

heic图片怎么转成jpg格式,这6个方法亲测有用(超简单)

heic图片怎么转成jpg&#xff1f;现在我们都喜欢用手机来拍摄记录生活中的美好瞬间&#xff0c;照片太多的话我们为了不占用手机内存&#xff0c;会把照片导入电脑进行储存。但是苹果手机用户在导入相册照片时可能会遇到以下问题&#xff1a;因为苹果手机拍摄照片格式默认为hei…

友思特应用 | 多接口的智驾无忧:GigE相机在自动驾驶数据采集系统的稳定应用

导读 GigE接口相机为自动驾驶数据采集提供了高性价比的选择。在此基础上&#xff0c;友思特搭建了多GigE接口支持PTP的采集设备系统级方案 BRICK2&#xff0c;为多传感器数据记录测试提供了完整的解决方案。 GigE接口相机与智能驾驶数据采集 智能驾驶技术的发展已经成为当今科…

【前端vue3】TypeScrip-元组类型和枚举类型

元组类型 元组就是数组的变形 元组&#xff08;Tuple&#xff09;是固定数量的不同类型的元素的组合。 元组与集合的不同之处在于&#xff0c;元组中的元素类型可以是不同的&#xff0c;而且数量固定。元组的好处在于可以把多个元素作为一个单元传递。如果一个方法需要返回多个…

day03-主页模块-修改密码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.获取用户资料在Vuex中共享登录成功跳转到主页之后&#xff0c;可以获取用户资料&#xff0c;获取的资料在Vuex中共享&#xff0c;这样用户就可以很方便的获取该信…

【基础算法总结】分治—快排

分治—快排 1.分治2.颜色分类3.排序数组4.数组中的第K个最大元素5.库存管理 III 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.分治 分治…

Node.js安装及配置

文章目录 1.安装Node.js2.创建目录3.配置环境变量4.配置全局安装路径和缓存路径(可选)配置Webstorm 1.安装Node.js https://registry.npmmirror.com/binary.html?pathnode 推荐安装18.x版本 2.创建目录 下载解压后进入目录&#xff0c;创建node_global和node_cache两个空文…

在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 传统的RTOS和嵌入式Linu…

【氮化硼】 h-BN薄膜的控制辐射损伤和边缘结构

摘要: 本文展示了通过化学剥离法合成的六方氮化硼(h-BN)膜在80 kV电子束辐照下表现出比石墨烯更高的抗辐射损伤能力。研究表明,即使在长时间电子束辐照下,单层h-BN也不会形成空位缺陷或发生非晶化。实验观察到在h-BN薄膜中,锯齿形边缘结构占主导地位,且这些边缘主要由氮…

6个操作简单又好用的实用办公工具

分享6个操作简单又好用的实用办公工具&#xff0c;手机和电脑上的都有&#xff0c;好好使用可以让工作效率翻倍&#xff01; 1.方方格子 一个大型的的【Excel工具箱】&#xff0c;支持32位和64位Office&#xff0c;可直接作为插件使用&#xff0c;功能覆盖非常全面&#xff0c…

MySQL实战-4 | 深入浅出索引(上)(下)

什么是数据库索引&#xff0c;索引又是如何工作的呢&#xff1f; 一句话简单来说&#xff0c;索引的出现其实就是为了提高数据查询的效率&#xff0c;就像书的目录一样。一本 500 页的书&#xff0c;如果你想快速找到其中的某一个知识点&#xff0c;在不借助目录的情况下&…