![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2006
Сообщений: 40
|
Всем моё почтение!
Прошу помощи в поиске пути (хотя бы направления куда копать) для решения следующей задачи: (Пояснения во вложении) Дано: 1. Поле (MxN), разбитое на клетки, у каждой клетки имеется свой номер, и соответственно можно определить номер строк и столбца (координаты); 2. Узлы (игроки), находящиеся строго в центре клеток. Имеют номера и координаты (номера ячеек 17 и 25); 3. K - кол-во ходов (здесь, на рисунке - K=3). 4. Некий предмет, который находится у игрока. Известны координаты - совпадают с координатами игрока (у игрока на клетке 25). Найти 1. Клетки куда можно сходить (бросить предмет). (Зелёные клетки) Ограничения 1. Ходы возможны только по направлениям ферзя и на кол-во К-клеток. 2. Если на пути встречается другой игрок, то передав ему предмет, он может кинуть последний на оставшееся кол-во клеток (от первого игрока можно бросить по темным линиям, от второго - светлым). 3. Отдать обратно предмет нельзя (клетка 33) Может есть какие идеи? Рекурсия или каждое направление рассматривать отдельно? Словом, в затруднении... |
|
|||||
|
самое простое перебором.
например, номера полей можно задать так: по игрику десятки по иксу единицы - пример 23: второй ряд, третий столб после чего циклами перебрать все направления: для проверок нужных клеток получаем их номера +-10 по вертикали, +-1 по горизонту, по диагонялям соотвественно и десятки и единицы менять. Кол-во вхождений цикла ограничивается: 1 кол-вом ходов 2 пока не выйдем за рамки поля 3 пока не достигнем целевой клетки с которой можем произвести действие по восем цыклов на объект. кол-во цыклов можно снижать если попадается достаточное условие. Например в шашках при проверки наличия ходов, нужно обрывать проверку при первом положительном результате. Я так делал шашки когда-то: проверял наличие хода вообще, подсказку для движения выбранной шашки/дамки, блокировка хода если была возможность "сожрать" противника и несколько разных опций в зависимости от выбора правил игры. ![]() Возможно это делается по-умному, какими-нибудь битовыми операциями и матрицами... |
|
|||||
|
Регистрация: May 2006
Сообщений: 40
|
Спасибо за помощь!
В целом пришел к такому же исходу - перебор по 8 циклам (направлениям). |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|