Мне нужно найти все кластеры бактерий, которые связаны (4-соединение) в программе Python. Входной файл, который выглядит следующим образом:Найти кластеры бактерий
###
#####
#######
#######
######
###### ##
#### #####
## ###### ####
# ###### ####
### ########## #####
####### #### ## ######
######### ## # #####
# #### ### ###
##### #### # ## ##
##### ###### #
###### ########
#### ########
#######
#######
Примечание: Кластеры, которые примыкают к краю сетки не может быть подсчитывались
Этот файл будет сохранен в виде 2D массива в моем классе , Я написал эту функцию, чтобы найти все кластеры, но она создает для многих кластеров (22 вместо 5). Любая идея, что я могу делать неправильно?
Мой код:
def findAll(self):
self.colonies = [set()]
for i in range(len(self.grid)):
for j in range(len(self.grid[i])):
if self.grid[i][j] == "#":
added = False
count = 0
for k in self.colonies:
if self.checkNeighbours((i, j), k):
k.add((i, j))
added = True
count += 1
if not added:
self.colonies.append({(i, j)})
def checkNeighbours(self, pos, current):
return ((pos[0] + 1, pos[1]) in current
or (pos[0] - 1, pos[1]) in current
or (pos[0], pos[1] + 1) in current
or (pos[0], pos[1] - 1) in current)
Уверены ли, что на этом изображении нет 6 бактерий? –
Есть действительно 6 бактерий, но я забыл упомянуть, что бактерии, которые прилегают к краю сетки, не могут считаться. Таким образом, это число бактерий 5. –
О, я вижу, это кластеры. И нижний кластер следует игнорировать? Если это так, вы можете захотеть добавить его в вопрос, а не здесь, чтобы читатели могли его легко увидеть. –