目录
python独立海域
一、题目要求
1、编程实现
2、输入输出
二、算法分析
三、程序编写
四、程序说明
五、运行结果
六、考点分析
七、 推荐资料
1、蓝桥杯比赛
2、考级资料
3、其它资料
python独立海域
第十三届蓝桥杯青少年组python省赛真题
一、题目要求
(注:input()输入函数的括号中不允许添加任何信息)
1、编程实现
有一片海域划分为N“M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。请问这片N'M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N*M以外的海域都为已被污染的海域)
例如:N=4,M=5,4*5的海域中,已被污染海域和没被污染的海域如下图:
这块4*5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。
2、输入输出
输入描述:第一行输入两个正整数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
二、算法分析
- 题目是要搜索二维矩阵中所有1是否有连城一片的独立数量
- 关键是如何搜索表示是独立的海域
- 题目告知是上下左右都没有相连的,也就是找到上下左右数字是0的就没有相连
- 可以通过dfs深度搜索或者bfs广度搜索进行实现
- 下面采用深度搜索的实现方式:从第一个点开始逐个遍历,判断当前这个点是否是陆地
- 如果是就向当前点的上下左右四个点继续调用深搜dfs方法
- 如果超出边界或者当前点的值为0就回退
三、程序编写
n,m = map(int,input().split(','))
ls = []
for i in range(n):
ls.append(list(map(int,input().split(','))))
def dfs(i,j):
#如果行或者列超出边界,或者格子是0或者访问过
if (i<0 or i==n) or (j<0 or j==m) or ls[i][j]==0:
return;
ls[i][j] = 0 #访问过
dfs(i-1,j)
dfs(i+1,j)
dfs(i,j-1)
dfs(i,j+1)
count = 0
for i in range(n):
for j in range(m):
if ls[i][j] == 1:#是陆地
count += 1
dfs(i,j)
print(count)
四、程序说明
- 首先,通过输入函数获取输入的行数和列数,并将其分别赋值给变量n和m
- 然后,使用一个循环,将输入的二维列表逐行添加到变量ls中
- 接下来,定义了一个名为dfs的递归函数,用于判断给定坐标的格子是否是连通的陆地
- 如果坐标超出边界,或者格子是0(海洋)或者已经访问过,则直接返回
- 否则,标记该格子为已访问,并递归判断上、下、左、右四个方向的格子是否是连通的陆地
- 初始化变量count为0,用于统计陆地数量
- 接下来,通过两个嵌套的循环遍历二维列表中的每个格子。如果该格子的值为1(陆地),则将count加1,并调用dfs函数判断该陆地的连通情况
- 最后,输出count,即连通陆地的数量。
五、运行结果
4,5
1,1,0,0,0
1,0,1,0,0
1,0,0,0,0
1,1,0,1,1
3
六、考点分析
难度级别:难,这题相对而言还是有一定小难度,难在算法设计,具体主要考查如下:
- 学会分析题目,找到解题思路
- 学会DFS或者BFS算法知识的应用
- input函数:Python 中 input() 函数接受一个标准输入数据,返回为 string 类型。
- int函数:强制将传入对象转换成整数类型
- split函数:按照指定的分隔符进行分割
- map函数:将指定的对象按照指定的函数进行迭代,在这里是将时分秒字符串类型数据按int整数类型数字返回输出(相当于多个变量强制类型转化)
- list函数:强制将参数转化成列表对象
- 学会列表的相关操作:列表声明、取数、遍历等等
- 学会for循环的使用:for循环可以遍历任何有序的项及列表元素等等。
- range函数:rang(a,b),循环的时候是不包括b的,所以我们这个案例中要转变一下,要想包含b,就应该写成range(a,b+1)
- 学会if...条件判断语句的使用:满足条件才执行相应的程序
- print函数:用于打印输出,最常见的一个函数。
- 充分掌握算法相关知识、for循环和列表相关操作函数的使用
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!
七、 推荐资料
- 所有考级比赛学习相关资料合集【推荐收藏】
1、蓝桥杯比赛
-
蓝桥杯python选拔赛真题详解
-
蓝桥杯python省赛真题详解
-
蓝桥杯python国赛真题详解
-
历届蓝桥杯科技素养计算思维真题解析
2、考级资料
-
python等级一级真题解析【电子学会】
-
python等级二级真题解析【电子学会】
-
python等级三级真题解析【电子学会】
-
python等级四级真题解析【电子学会】
3、其它资料
-
初学python100例
- 历届蓝桥杯scratch国赛真题解析
- 历届蓝桥杯scratch省赛真题解析
- 历届蓝桥杯scratch STEMA选拔赛真题解析
- 历届蓝桥杯科技素养计算思维真题解析
- 画图-scratch编程考级99图
- 电子学会历年scratch等级考试一级真题解析
- 电子学会历年scratch等级考试二级真题解析
- 电子学会历年scratch等级考试三级真题解析
- 电子学会历年scratch等级考试四级真题解析
- 零基础学习scratch3.0【入门教学 免费】
- 零基础学习scratch3.0【视频教程 114节 免费】