Думаю, кроме как перебора нет другого способа. Только ты не клетки проверяй а ящики... например в поле 64х64 12 ящиков.
проверяем расстояние от первого ящика до остальных 11;
потом от другого ящика до остальных 10;
и т.д.
Как программист думаю что можно использовать и такой вариант.
если линий очень много и ящиков тоже оооочень много то я бы сделал так:
1 создал бы массив ящиков вообщем box[id]; где хранил бы координаты каждого ящика
2 создал бы двумерный массив в котором хранил бы все столбцы и id ящиков на них лежащих Xarray[столбец][id]
3 создал бы двумерный массив в котором хранил бы все строки и id ящиков на них лежащих Yarray[строка][id]
4 Создал бы массив двумерный клеток в котором бы хранил наличие ящиков в клетке cell[x][y], если ящик есть то сell[x][y]=id ящика
если нет, то сell[x][y]=false
Вообщем если подумать то из этих конструкций можно много чего придумать.
Например в столбце Xarray[2] проверять только ящики из столбцов Xarray[0] и Xarray[4].
для более тонкого поиска можно использовать Xarray и Yarray вместе, что бы какие-нить закономерности выискивать.
и т.д.
Много раз изобретал такие алгоритмы для шахмат, для мокского боя и пр.
http://flaps.ru/sites/chess/ss.swf клиент для шахмат.
Думаю японокросы весчь апсалютна такая же, я сам хотел взяться за этот заказ
