Одним из оптимизированных решений является использование динамического программирования, но все еще очень дорого O (2 ** n), что не очень выполнимо, если вы не используете кластеризацию и распределение вычислений, рубин или один сервер не будут очень полезныВы.
Я бы порекомендовал вам придумать жадные критерии вместо того, чтобы использовать DP или грубую силу, которую было бы проще реализовать.
Как только ваша программа завершится, вы можете сделать некоторые заметки и сохранить результаты где-нибудь для последующих поисков, что также может сэкономить вам несколько циклов.
с точки зрения кода, вам потребуетсяреализовать вершины, ребра с весами.
т.е.: класс вершин с ребрами с весами, рекурсивный.чем класс графа, который будет заполнять данные.