Генерал ДФС на реке Кроссерс - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь написать DFS, чтобы решить множество проблем при пересечении реки (Fox Goat Cabbage, Realous Husbands, Mercenaries and Cannibals и т. Д.). Я написал классы головоломки, но у меня возникли проблемы с структурированием моего решателя. Я понимаю, как работает DFS, но не могу понять, с чего начать адаптировать его к этому дизайну.

В каждой головоломке есть метод move (), который возвращает true, если это верный ход, или false, если он нарушает набор правил. Пассажиры отслеживаются в паре списков, которые представляют каждую соответствующую сторону реки. У решателя есть доступ к этим спискам, но я не уверен, как использовать это для генерации возможного набора движений, так как возможные движения будут меняться каждый раз, когда пассажира переправляют через реку.

1 Ответ

2 голосов
/ 12 октября 2010

Создайте метод validMoves в объектах вашего состояния (или узла), который возвращает массив, Collection из или, что еще лучше, Iterator через ходы (или более допустимые состояния). Вызовите это из алгоритма поиска (в фазе «расширение узла»).

...