Прошу прощения за расплывчатое название, но я не знаю, как это лучше описать. Не уверен, что это правильный сайт.
Допустим, у меня есть список рецептов:
rip + ir => mf
ip => ir
ip + s => rip
ii => ip
ir => s
Мне нужны все возможные списки требуемых рецептов (и сколько раз ) для создания финального элемента mf
. Для каждого предмета есть только один рецепт, поэтому на данный момент существует один список рецептов (и требуются все рецепты, даже три раза: ii => ip
).
Когда я добавляю второй рецепт для s
:
ip => s
Теперь у меня есть два возможных списка рецептов (разница в том, что используется элемент s
, либо ir => s
, либо ip => s
).
Но добавляем еще два рецепты:
sp => ip
i + c => sp
Все усложняет, теперь списки возможных способов получения mf
имеют переменную длину (получение ip
с последним рецептом требует одного дополнительного шага), и его становится все больше и больше компилируется, когда добавляется больше разных рецептов, по которым производятся одни и те же предметы.
Мой вопрос: как я могу решить эту проблему? Известно ли что-то, что уже было решено несколько раз?