本文共 1775 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到农场中最大的湖泊大小。湖泊被定义为由水格子组成的连通区域,中心点周围的四个方向相连。我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历这些连通区域,计算每个湖泊的大小,并找到最大的湖泊。
import sysfrom collections import dequedef main(): # 读取输入 N, M, K = map(int, sys.stdin.readline().split()) water_points = [] for _ in range(K): r, c = map(int, sys.stdin.readline().split()) water_points.append((r-1, c-1)) # 转换为0-based索引 water_set = set(water_points) visited = [[False for _ in range(M)] for _ in range(N)] max_size = 0 # 遍历每个水点 for (r, c) in water_points: if not visited[r][c]: # 使用BFS计算连通区域大小 queue = deque() queue.append((r, c)) visited[r][c] = True size = 1 while queue: x, y = queue.popleft() for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: nx = x + dx ny = y + dy if 0 <= nx < N and 0 <= ny < M: if (nx, ny) in water_set and not visited[nx][ny]: visited[nx][ny] = True queue.append((nx, ny)) size += 1 if size > max_size: max_size = size print(max_size)if __name__ == "__main__": main()
sys.stdin.readline读取输入数据,转换为整数处理。水格子的位置存储在water_points列表中,并转换为0-based索引。water_set用于存储所有水格子的位置,visited数组用于记录每个格子是否已被访问。这种方法确保了我们能够高效地找到最大的湖泊,并正确计算其包含的单元格数量。
转载地址:http://wehaz.baihongyu.com/