感觉题目有歧义....是统计不会被淹的0的数量不是区域的数量。
from collections import deque def in_bound(x, y, n, m): return 0 <= x < n and 0 <= y < m n, m = map(int, input().split()) maze = [list(input()) for _ in range(n)] dx = [-1, 0, 0, 1] dy = [0, -1, 1, 0] visited = [[False] * m for _ in range(n)] blocks = [] q = deque() k = 0 for i in range(n): for j in range(m): if maze[i][j] == '0' and not visited[i][j]: blocks.append([]) visited[i][j] = True q.append((i,j)) k += 1 blocks[-1].append((i,j)) while q: x, y = q.popleft() for p in range(4): nx = x + dx[p] ny = y + dy[p] if in_bound(nx,ny,n,m) and not visited[nx][ny] and maze[nx][ny] == '0': visited[nx][ny] = True q.append((nx,ny)) blocks[-1].append((nx,ny)) cnt = 0 for block in blocks: flag = True for points in block: x, y = points[0],points[1] if (x == 0 or x == n-1) or (y == 0 or y == m-1): flag = False break if flag: cnt += len(block) print(cnt)