0

У меня проблема: одна комната вмещает 13 человек, одну 9 и другую 4. Комнаты все начинают пустым 0 0 0 и могут быть заполнены до их емкость или содержимое одной комнаты могут быть перенесены в другую. Таким образом, для ситуации, такой как 13 0 0, 13 могли заполнить третью комнату, сделав ее 9 0 4. И так далее. Я хочу генерировать всевозможные возможности (следуйте за каждым поколением до тех пор, пока не достигнет END или состояния, которое я уже создал. Я уже реализовал это с помощью LOTS из If Ifse statement ... Что является наиболее кратким способом, я могу сгенерировать это ?AI - Как сжато генерировать все возможные результаты, основанные на правилах

+1

Покажите нам код, который у вас есть, и, основываясь на формулировке вопроса, я также предлагаю http://codereview.stackexchange.com для широкого обзора кода. – MeetTitan

+0

Это звучит как хороший случай для рекурсии. – yshavit

ответ

2

Вы можете определить класс с именем State, который содержит состояние трех комнат, например, вы можете сделать что-то вроде State st = new State (13, 0, 0). Конструктор состояния также может проверить состояние, чтобы garntee, что первый номер может содержать только 13 человек, второй 9 и третий один 4.

Затем вы можете реализовать функцию с именем расширения, с подписью:

List<State> expand (State st) 

Эта функция получает состояние и возвращает список состояний, которые могут быть сгенерированы из принятого состояния.

Чтобы сделать:

Я хочу, чтобы создать все различные возможности (следовать за каждое поколение , пока не достигнет конца или состояние я уже приданного

Есть много способов сделайте это, это зависит от того, какие данные вы хотите получить? Вы хотите, чтобы набор государств привел вас к состоянию, которое вы хотите? Или вы просто хотите знать, что состояние доступно?

EDIT: Ok, так как вы хотите, чтобы получить все достижимые состояния, вы можете создать еще одну функцию, как:

List<State> getReachableStates(State root) 

Теперь вы можете реализовать это в рекурсивном способе или в итерационном пути. Это итеративный номер: Этот метод содержит список расширенных состояний и список состояний, в которые разыгрываются состояния, которые поддерживают состояние корня, которое вы получаете в качестве аргумента. Затем, пока у вас есть состояние для расширения, вы вызываете расширение на состояние, которое вы удаляете из списка состояний для расширения. После вызова расширения вы добавляете расширенное состояние в список обработанных состояний и добавляете результат вызова expand в список процессов. Когда вы закончите, верните список расширенных состояний.

+0

Я хочу сгенерировать все достижимые состояния, что означает, что я должен учитывать всевозможные ситуации передачи частей комнат в другую комнату, плюс, в любое время комнаты = 0, ее можно изменить на макс (как возможный ход) – jonbon

Смежные вопросы