* из любого квадрата этой грядки можно попасть в любой другой квадрат этой же грядки, последовательно переходя по грядке из квадрата в квадрат через их общую сторону;
* никакие две грядки не пересекаются и не касаются друг друга ни по вертикальной, ни по горизонтальной сторонам квадратов (касание грядок углами квадратов допускается).
Подсчитайте количество грядок на садовом участке.
Входные данные
В первой строке находятся числа N и M через пробел, далее идут N строк по M символов. Символ # обозначает территорию грядки, точка соответствует незанятой территории. Других символов в исходном файле нет. 1 ≤ N, M ≤ 200.
Выходные данные
Вывести одно число — количество грядок на садовом участке.
Пример
Входные данные:
##..#####.
.#.#.#....
###..##.#.
..##.....#
.###.#####
Выходные данные:
5
import numpy as np
data0="""
##..#####.
.#.#.#....
###..##.#.
..##.....#
.###.#####
"""
arr = np.frombuffer(data0, dtype=np.int8)
arr = arr[arr>20].reshape((5, 10))
arr[arr==35]=1
arr[arr==46]=0
print arr
buf = np.zeros(arr.shape)-1
# -1 - unchecked
# 0 - no area
# 1..n - area number
def mark_area(arr, buf, i, j, mark):
if i < 0 or j < 0 or i >= arr.shape[0] or j >= arr.shape[1]:
return False
if not arr[i, j]:
return False
if buf[i, j] == -1:
buf[i, j] = mark
mark_area(arr, buf, i-1, j, mark)
mark_area(arr, buf, i+1, j, mark)
mark_area(arr, buf, i, j-1, mark)
mark_area(arr, buf, i, j+1, mark)
return True
else:
return False
counter = 1
for i in xrange(arr.shape[0]):
for j in xrange(arr.shape[1]):
if mark_area(arr, buf, i, j, counter):
counter += 1
print buf
print np.max(buf)
n = int(raw_input().split(' ', 1)[0])
field = [ list(raw_input()) for _ in xrange(n) ]
m = len(field[0])
beds = 0
for x in xrange(n):
for y in xrange(m):
if field[x][y] == '#':
beds += 1
stack = [ (x, y) ]
while len(stack) != 0:
x, y = stack.pop()
if x >= 0 and x < n and y >= 0 and y < m and field[x][y] == '#':
field[x][y] = '.'
stack.append((x + 1, y))
stack.append((x - 1, y))
stack.append((x, y - 1))
stack.append((x, y + 1))
print(beds)