Вот он.
это не он, это один из вариантов его реализации, причем рабочий.
Суть алгоритма в том что от исходной точки находятся все ячейки в которую можно попасть за один шаг, их максимум 4, от этих 4, те в которые можно попасть за 2 шага, их будет максимум 8, от этих 8 еще один шаг, другими словами, можно обойтись и меньшим количеством циклов, так как каждая ячейка проверяется всего на 4 возможных варианта - на наличие свободной клетки справа, слева, сверху и снизу. Всего клеток 9x9=81, т.е. рано или поздно мы разложим все "фишки" (которых будет максимум 91, при условии что мы заполняем ими пустое поле)
Другими словами:
От исходной точки с координатами ii, jj мы делаем 4 проверки (справа, слева, сверху и снизу), если находим свободную ячейку присваиваем ей 1, а ее координаты запоминаем в еще одном вспомогательном массиве и считаем количество найденных пустых клеток, если ноль, то процесс останавливается, если не ноль, то проходимся по координатам, находящимся во вспомогательном массиве и от каждой делаем проверку на наличие свободной клетки по соседству и так далее, пока количество найденных пустых клеток не будет равно нулю.
К примеру, на приведенной картинке процесс закончится на 19 шаге.
Кстати, в решении задачи с помощью трех циклов я нахожу пустые клетки, а затем проверяю есть ли по соседству фишка, от которой необходимо отложить следующую. Можно было бы искать клетки с текущим номером "шага", а затем от них проверять на соседство с пустыми, но тогда кода было бы больше.
Я посчитал, что мощности устройств, на которых будет работать приложение, с лихвой достаточно, чтоб выполнить три цикла проверок незаметно для пользователя, да и проводятся они в момент когда он выбирает исходную точку и чешет репу где указать конечную.
Сообщение отредактировал fibe: 06.08.2013, 09:08:51