Нахождение соседних блоков по сетке - PullRequest
0 голосов
/ 28 ноября 2009

У меня есть такая сетка:

  1234567
1 ACBDBAB
2 ABDBABC
3 ABADBAB
4 BABDAAB
5 BABCDBA
6 BDBABCB
7 ABBCBAB

Учитывая определенную координату, например (3: 4), я бы хотел найти все остальные блоки с одинаковыми буквами, имеющие хотя бы одну общую сторону с оригиналом блок и один из этих блоков (рекурсивно). На моем примере я бы хотел следующие блоки:

  1234567
1 .......
2 .......
3 .......
4 ..B....
5 ..B....
6 ..B....
7 .BB....

Моя текущая идея - проверить исходный столбец вверх и вниз, увеличивая и уменьшая номер строки, пока буква не станет другой, в моем примере это дал бы мне номера строк (4, 5, 6, 7). Затем я увеличиваю номер столбца и проверьте мои предыдущие номера строк, в моем примере, ни один из них не оригинального письма, поэтому я начинаю уменьшать, я проверяю 4, 5, 6 и 7 в столбце 2, и я вижу только 7 совпадений, поэтому я продолжаю к столбцу 1 и проверяю строку 7 и так на.

1 Ответ

2 голосов
/ 28 ноября 2009

Я полагаю, что вы ищете алгоритм заполнения потока .

Редактировать: Я задумался над предложенным вами алгоритмом и понял, почему он не будет работать. Проблема в том, что он обнаруживает только выпуклые области. Скажем, у вас есть сетка, подобная этой:

BAB
BBB
BAB

И вы хотели бы заменить все буквы B на C. Если вы запустите свой алгоритм из B в центре сетки, вы получите это:

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