刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

编程实现:

有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。

例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图:

这块4*4的农田中有3块独立的农作物区域(红色的3部分)。

输入描述:

第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间以一个英文逗号隔开

接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间以一个英文逗号隔开

输出描述:

输出一个整数,表示N*M的农田中有几块独立的农作物区域


样例输入:

4,4
R,R,R,X
R,X,R,X
X,X,X,R
R,X,X,X

样例输出:

3

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythondef count_crop_areas(n, m, grid):# 初始化一个二维数组,用于记录每个位置是否属于农作物区域is_crop_area = [[False] * m for _ in range(n)]# 遍历农田的每个位置for i in range(n):for j in range(m):# 如果当前位置是农作物if grid[i][j] == 'R':# 初始化一个队列,用于广度优先搜索queue = [(i, j)]is_crop_area[i][j] = True# 广度优先搜索while queue:x, y = queue.pop(0)# 上下左右四个方向for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:nx, ny = x + dx, y + dy# 判断新位置是否合法if 0 <= nx < n and 0 <= ny < m:# 如果新位置是杂草,则跳过if grid[nx][ny] == 'X':continue# 如果新位置没有被访问过,则将其加入队列if not is_crop_area[nx][ny]:is_crop_area[nx][ny] = Truequeue.append((nx, ny))# 统计农作物区域的数量crop_areas = 0for i in range(n):for j in range(m):if is_crop_area[i][j]:crop_areas += 1return crop_areas# 输入n, m = map(int, input().split(','))grid = [list(input().split(',')) for _ in range(n)]# 输出print(count_crop_areas(n, m, grid))```

解析:

【喵呜刷题小喵解析】:
本题要求计算农田中有几块独立的农作物区域。可以使用广度优先搜索(BFS)算法来解决这个问题。

首先,初始化一个二维数组 `is_crop_area`,用于记录每个位置是否属于农作物区域。然后,遍历农田的每个位置,如果当前位置是农作物,则使用广度优先搜索来找到与其相连的所有农作物位置,并将这些位置标记为属于农作物区域。最后,统计农作物区域的数量并返回结果。

在广度优先搜索过程中,使用队列来存储待搜索的位置。从当前位置开始,依次向上下左右四个方向搜索,如果新位置是合法的(在农田范围内且是农作物),则将其加入队列,并将其标记为属于农作物区域。重复这个过程,直到队列为空,即搜索结束。

在搜索结束后,遍历 `is_crop_area` 数组,统计农作物区域的数量并返回结果。
创作类型:
原创

本文链接:编程实现: 有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share