感觉题目有歧义....是统计不会被淹的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)

京公网安备 11010502036488号