n, m = map(int, input().split()) boxes = [input() for i in range(n)] v = [(x, y) for x in range(n) for y in range(m) if boxes[x][y] == '#'] component = {i: -1 for i in v} num = 0 is_vertice = lambda x, y: 0 <= x < n and 0 <= y < m and boxes[x][y] == '#' def a(v): if is_vertice(v[0]+1, v[1]): yield (v[0]+1, v[1]) if is_vertice(v[0]-1, v[1]): yield (v[0]-1, v[1]) if is_vertice(v[0], v[1]+1): yield (v[0], v[1]+1) if is_vertice(v[0], v[1]-1): yield (v[0], v[1]-1) for u in v: if component[u] != -1: continue s = [u] component[u] = num while s: now = s.pop() for i in a(now): if component[i] != -1: continue s.append(i) component[i] = num num += 1 print('comp', component) print('num', num) lst = [list(component.values()).count(i) for i in range(num)] print(lst) print(max(lst))
5 6 ..##.. ..##.. .#.... ###..# .#..#.
comp {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0, (2, 1): -1, (3, 0): -1, (3, 1): -1, (3, 2): -1, (3, 5): -1, (4, 1): -1, (4, 4): -1}
comp {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0, (2, 1): 1, (3, 0): 1, (3, 1): 1, (3, 2): 1, (3, 5): -1, (4, 1): 1, (4, 4): -1}
comp {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0, (2, 1): 1, (3, 0): 1, (3, 1): 1, (3, 2): 1, (3, 5): 2, (4, 1): 1, (4, 4): -1}
comp {(0, 2): 0, (0, 3): 0, (1, 2): 0, (1, 3): 0, (2, 1): 1, (3, 0): 1, (3, 1): 1, (3, 2): 1, (3, 5): 2, (4, 1): 1, (4, 4): 3}
num 4
[4, 5, 1, 1]
5