2401_88043516 2025-05-02 14:05 采纳率: 0%
浏览 15

蓝桥杯省赛的题(真的不会)

T1226农田
困难
2022
蓝桥杯
省赛
bfs
泛洪算法(flood fill )
标准IO
传统题
时间限制
1000ms
内存限制
256MB
通过/尝试次数
160/278
来源

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

输入描述

第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间以一个英文逗号隔开 接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间以一个英文逗号隔开

输出描述

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

样例

input1
复制代码
4,4
R,R,R,X
R,X,R,X
X,X,X,R
R,X,X,X
output1
复制代码
3

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-05-02 14:05
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    蓝桥杯省赛的题,真的不会?没问题,我来帮助你解答。

    题目描述:TomAnderson有一块农田被划分成许多小块,每块小块都有一个高度。现在,TomAnderson想将所有小块的高度统一为一个高度,使得所有小块的高度都相同。为了实现这个目标,他可以选择一些小块,并将它们的高度降低到0,然后将这些小块的高度降低到0的部分填充到其他小块中。

    问题:如何使用BFS算法解决这个问题?

    解决方案:

    1. 首先,遍历整个农田,记录每个小块的高度和坐标。
    2. 使用BFS算法,遍历每个小块,并将高度为0的小块标记为已访问。
    3. 遍历每个小块,如果小块的高度大于0,并且小块的上下左右四个方向都没有高度为0的小块,那么将小块的高度降低到0。
    4. 将高度为0的小块的高度降低到0的部分填充到其他小块中。

    Python 代码:

    from collections import deque
    
    def flood_fill(height_map):
        m, n = len(height_map), len(height_map[0])
        visited = [[False] * n for _ in range(m)]
        queue = deque()
    
        for i in range(m):
            for j in range(n):
                if height_map[i][j] > 0:
                    queue.append((i, j))
                    visited[i][j] = True
    
        while queue:
            x, y = queue.popleft()
            for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
                nx, ny = x + dx, y + dy
                if 0 <= nx < m and 0 <= ny < n and height_map[nx][ny] > 0 and not visited[nx][ny]:
                    queue.append((nx, ny))
                    visited[nx][ny] = True
                    height_map[nx][ny] -= 1
    
        return height_map
    

    这个算法的时间复杂度是O(mn),空间复杂度是O(mn),其中m和n是农田的高度和宽度。

    希望这个解答能够帮助你解决问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 5月2日