Сопоставление с образцом для людей, которые не знают алгоритмов - поиск соседних X в сетке - PullRequest
2 голосов
/ 16 ноября 2011

Мне интересно, каков будет лучший способ для меня подойти к проблеме, где мне нужно найти соседние (горизонтальные, вертикальные, диагональные) X в сетке, которая предоставляется.

Я хотел знать, что такое рекурсивный и нерекурсивный путь. Я попробовал рекурсивный метод проверки каждого столбца, а затем итерации строк - что дает мне X в одном направлении - я должен написать отдельные рекурсивные функции для других направлений?

Пример сетки:

XXX0X 
0000X 
00X00 
XXXX0 
0000X

вывод должен быть:

  • (0,0), (1,0), (2,0)
  • (4,0), (4,1)
  • (2,2), (0,3), (1,3), (2,3) (3,3)

1 Ответ

2 голосов
/ 16 ноября 2011

Возможно, вы захотите проверить алгоритм Flood Fill. Вы можете найти его в Википедии.

Я думаю, что вы описываете более или менее это. Что вы делаете в основном:

For a given position:
If it is of the desired color (in your case 'O'):
  mark it (say, re-color it to a color 'M'),
  recurse on all desirable directions (run the same algorithm
    on new positions, which are +/-1 away);
else
  do nothing.

В вашем случае результатом будут позиции, помеченные буквой «М». Если вы хотите найти дополнительные смежности, вы всегда можете сбросить те, которые отмечены буквой «М», и запустить алгоритм в другой позиции.

РЕДАКТИРОВАТЬ: В соответствии с вашими примерами, вы, кажется, вы ищете соседние иксы. :)

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