fork download
  1. n, m = map(int, input().split())
  2. boxes = [input() for i in range(n)]
  3.  
  4. v = [(x, y) for x in range(n) for y in range(m) if boxes[x][y] == '#']
  5.  
  6. component = {i: -1 for i in v}
  7. num = 0
  8.  
  9. is_vertice = lambda x, y: 0 <= x < n and 0 <= y < m and boxes[x][y] == '#'
  10.  
  11. def a(v):
  12. if is_vertice(v[0]+1, v[1]): yield (v[0]+1, v[1])
  13. if is_vertice(v[0]-1, v[1]): yield (v[0]-1, v[1])
  14. if is_vertice(v[0], v[1]+1): yield (v[0], v[1]+1)
  15. if is_vertice(v[0], v[1]-1): yield (v[0], v[1]-1)
  16.  
  17. for u in v:
  18. if component[u] != -1: continue
  19.  
  20. s = [u]
  21. component[u] = num
  22. while s:
  23. now = s.pop()
  24. for i in a(now):
  25. if component[i] != -1: continue
  26. s.append(i)
  27. component[i] = num
  28. num += 1
  29. print('comp', component)
  30.  
  31. print('num', num)
  32. lst = [list(component.values()).count(i) for i in range(num)]
  33. print(lst)
  34. print(max(lst))
Success #stdin #stdout 0.12s 14020KB
stdin
5 6
..##..
..##..
.#....
###..#
.#..#.
stdout
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