USACO:用Python代码解析卫星照片中谷仓与奶牛的数量
以下是使用Python语言解决此问题的代码: ```python # 定义深度优先搜索函数,用于标记和检查连通块 def dfs(x, y, visited, grid): rows, cols = len(grid), len(grid[0]) # 存储连通块中 # 字符的坐标 positions = [] stack = [(x, y)] while stack: cur_x, cur_y = stack.pop() # 如果越界、已经访问过或者不是 # 字符,跳过 if cur_x < 0 or cur_x >= rows or cur_y < 0 or cur_y >= cols or visited[cur_x][cur_y] or grid[cur_x][cur_y] != '#': continue # 标记为已访问 visited[cur_x][cur_y] = True positions.append((cur_x, cur_y)) # 向四个方向扩展 stack.append((cur_x + 1, cur_y)) stack.append((cur_x - 1, cur_y)) stack.append((cur_x, cur_y + 1)) stack.append((cur_x, cur_y - 1)) # 检查连通块是否为矩形 min_x = min([pos[0] for pos in positions]) max_x = max([pos[0] for pos in positions]) min_y = min([pos[1] for pos in positions]) max_y = max([pos[1] for pos in positions]) for i in range(min_x, max_x + 1): for j in range(min_y, max_y + 1): if grid[i][j] != '#': return False return True # 读取输入 n, m = map(int, input().split()) grid = [input() for _ in range(n)] # 初始化访问标记数组 visited = [[False] * m for _ in range(n)] barns = 0 cows = 0 # 遍历整个网格 for i in range(n): for j in range(m): if grid[i][j] == '#' and not visited[i][j]: if dfs(i, j, visited, grid): barns += 1 else: cows += 1 # 输出结果 print(barns) print(cows) ``` 代码解释: 1. `dfs` 函数:该函数使用深度优先搜索(DFS)来遍历连通块。它接受当前位置 `(x, y)`、访问标记数组 `visited` 和网格 `grid` 作为参数。在 DFS 过程中,将连通块中所有 `#` 字符的坐标存储在 `positions` 列表中。然后,通过计算这些坐标的最小和最大 `x`、`y` 坐标,检查该连通块是否为矩形。如果是矩形,则返回 `True`,否则返回 `False`。 2. 主程序:首先读取输入的行数 `n` 和列数 `m`,以及网格数据。然后初始化访问标记数组 `visited`,用于记录每个位置是否已经被访问过。接着,遍历整个网格,对于每个未访问过的 `#` 字符,调用 `dfs` 函数进行检查。如果返回 `True`,则该连通块是谷仓,`barns` 计数器加 1;否则,该连通块是奶牛,`cows` 计数器加 1。输出谷仓和奶牛的数量。 复杂度分析: - 时间复杂度:$O(N * M)$,其中 $N$ 是行数,$M$ 是列数。因为每个位置最多被访问一次。 - 空间复杂度:$O(N * M)$,主要用于存储访问标记数组。 ######[AI问答 | 850点数解答 | 2026-02-03 17:15:10]
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)257
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)252
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)488
- mallshop商城网站:数据库设计与强大业务功能全揭秘(GPT | 257点数解答 | 2024-12-09 14:08:15)297
- USACO:用Python代码解析卫星照片中谷仓与奶牛的数量(字节豆包 | 850点数解答 | 2026-02-03 17:15:10)30
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)441
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)435
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)302
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)324
- 全套代码框架:用B4A与PHP打造手机多数据远程备份及GPS轨迹记录系统,附开发避雷指南 (DeepSeek | 1130点数解答 | 2025-08-19 19:40:09)155
- 超详细!B4A客户端与PHP服务端实现手机数据远程备份及GPS轨迹记录全代码揭秘(阿里通义 | 1773点数解答 | 2025-08-19 19:41:05)156
- 超详细!B4A客户端与PHP服务端实现手机数据备份、定位轨迹记录及用户认证全代码示例(百度文心 | 1695点数解答 | 2025-08-19 19:44:37)154