2026-03-07 22:49:40 +09:00

59 lines
1.4 KiB
Python

from collections import deque
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
mapp = [input().rstrip() for _ in range(N)]
res = [[0]*M for _ in range(N)]
area_num = [[-1]*M for _ in range(N)]
area_size = []
def BFS(group, x, y) :
qu = deque()
qu.append((x, y))
area_num[y][x] = group
cnt = 1
while qu :
cx, cy = qu.popleft()
for dx, dy in zip([1,-1,0,0], [0,0,1,-1]) :
nx, ny = cx + dx, cy + dy
if 0 <= nx < M and 0 <= ny < N and mapp[ny][nx] != "1" and area_num[ny][nx] == -1 :
qu.append((nx, ny))
cnt += 1
area_num[ny][nx] = group
area_size[group] = cnt
group_num = 0
wall = []
for y in range(N) :
for x in range(M) :
if mapp[y][x] == "1" :
wall.append((x, y))
elif area_num[y][x] == -1 :
area_size.append(0)
BFS(group_num, x, y)
group_num += 1
for x, y in wall :
cnt = 1
neighbor = []
for dx, dy in zip([1,-1,0,0], [0,0,1,-1]) :
nx, ny = x + dx, y + dy
if 0 <= nx < M and 0 <= ny < N and area_num[ny][nx] != -1 :
area = area_num[ny][nx]
neighbor.append(area)
for n in set(neighbor) :
cnt += area_size[n]
res[y][x] = cnt % 10
for row in res :
print("".join(map(str, row)))