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

и концом

, проходящий по разу через все вершины, то можно добавить в граф новую вершину

, соединенную с

и

ребрами веса

и не соединенную ни с какими другими