Возможно, вы захотите проверить алгоритм 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.
В вашем случае результатом будут позиции, помеченные буквой «М». Если вы хотите найти дополнительные смежности, вы всегда можете сбросить те, которые отмечены буквой «М», и запустить алгоритм в другой позиции.
РЕДАКТИРОВАТЬ: В соответствии с вашими примерами, вы, кажется, вы ищете соседние иксы. :)