но как найти кратчайший гамильтонов путь во взвешенном графе, если даже найти хоть какой-нибудь из них в простом графе - задача NP-полная
ну это известная задача, она называется "задача коммивояжера", очень популярный объект исследования сейчас. Для нее построено множество разных алгоритмов, например,
тут масса примеров с открытым кодом. Правда, в стандартной в этой задаче рассматриваются гамильтоновы циклы - т.е., простые циклы, проходящие через все вершины; если мы хотим рассматривать путь с началом
и концом
, проходящий по разу через все вершины, то можно добавить в граф новую вершину
, соединенную с
и
ребрами веса
и не соединенную ни с какими другими