c# 8x8 сетка и нахождение соответствующих символов рядом - PullRequest
0 голосов
/ 15 апреля 2020

Хорошо, скажем, у вас есть такая сетка

xxxxSxxx
xxxxSSxx
xxxSSSxx
xxSSxSSx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx

Где x не совпадают соседние символы, а S совпадают Как можно через go найти подходящие? знать, что они хорошо совпадают? Я думал о том, чтобы идти сверху вниз, сравнивая правое и нижнее соседние, но это становится проблемой, когда идет спуск, а затем сопоставление влево. Любое руководство очень ценится, чтобы добавить к нему. Может быть более одного кластера, и только если есть определенное количество, оно считается как 5+ adajcent, иначе игнорировать

1 Ответ

1 голос
/ 15 апреля 2020

Предполагая, что есть только один кластер 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. оттуда, чтобы узнать, где его друзья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...