Предполагая, что есть только один кластер s
и сетка хранится в 2D матрице.
Вы можете создать новую 2D-матрицу, а затем go над каждым элементом в исходной сетке. Если он равен хотя бы одному из соседних элементов (будьте осторожны при сравнении элементов по краям сетки, чтобы не выделять go вне сетки), тогда отметьте его место (его x
и y
) как 1 в новой матрице. Если он не равен ни одному из соседних элементов, отметьте его положение в новой матрице 0.
Когда вы закончите. Места, где у вас есть 1 в новой матрице, - это места, где у вас есть s
в старой матрице.
Редактировать: решение новой проблемы в комментарии.
Создать новую 2D сетка. Go поверх старой и из каждой ячейки, к которой вы не прикасались (не посещались), начинайте поиск BFS с нее. Разверните BFS только в ячейки, которые имеют тот же символ, что и ячейка, из которой вы начали поиск BFS. Когда вы посещаете ячейку, отметьте ее место в новой матрице номером, по которому она выполняется. Например, если это ваш третий поиск BFS. Отметьте место каждого элемента, который вы посетили, в новой матрице с номером, по которому BFS выполняет поиск.
Когда вы начинаете каждый поиск BFS, ведите подсчет количества элементов, которые вы посетили до сих пор. Когда они пересекают порог у вас есть. Поместите номер BFS в массив или победителя. Таким образом, когда вы закончите. Вы go для этого вектора, каждое число в нем является группой символов, которые находятся выше порогового значения, которое у вас есть.
Например, вы видите 3 в своем векторе и хотите узнать места кластера с номером 3, которые вы можете go найти в новой двумерной сетке, найти первый элемент с номером 3 и начать поиск BFS. оттуда, чтобы узнать, где его друзья.