Полагаю, я бы посоветовал подумать об этом как о проблеме поиска в древовидной или графической структуре. Что вам нужно сделать, это продолжать пробовать разные пути и сохранить «лучшее решение». Тем не менее, это может в конечном итоге попробовать все возможные варианты и быть O (n!). Поэтому я советую вам использовать некую обрезку или логи c, чтобы это не так. т.е. альфа-бета или не использовать пути, если они превышают некоторые спецификации.