本文共 1812 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要计算一个网格中包含多少个不同的油藏。油藏是指相邻的油口袋,包括水平、垂直和对角线相邻的点。每个油藏的口袋数不超过100。
import sysfrom collections import dequedef main(): while True: line = input().strip() if not line: continue m, n = map(int, line.split()) if m == 0: break grid = [] for _ in range(m): row = input().strip() row = row[:n] # 确保只取n个字符 grid.append(row) visited = [[False for _ in range(n)] for _ in range(m)] count = 0 for i in range(m): for j in range(n): if grid[i][j] == '@' and not visited[i][j]: queue = deque() queue.append((i, j)) visited[i][j] = True while queue: x, y = queue.popleft() for dx in (-1, 0, 1): for dy in (-1, 0, 1): if dx == 0 and dy == 0: continue nx = x + dx ny = y + dy if 0 <= nx < m and 0 <= ny < n: if grid[nx][ny] == '@' and not visited[nx][ny]: visited[nx][ny] = True queue.append((nx, ny)) count += 1 print(count)if __name__ == "__main__": main()
visited,记录哪些点已经被访问过。这个方法确保了每个油口袋都被正确地标记和计数,处理了所有可能的相邻情况,包括对角线。
转载地址:http://nztj.baihongyu.com/