Возможно, это именно то, что имел в виду оригинальный постер, «перебирая каждую возможность вручную и сохраняя кратчайший путь», но я подумал, что хотел бы уточнить то, что представляется базовым решением.
Предположим, у вас уже есть двухточечный алгоритм кратчайшего пути - он имеет классические решения для различных видов графиков. Предположим, что все расстояния неотрицательны и d (A-> B-> C) = d (A-> B) + d (B-> C).
Основным является то, что путь начинается в S, проходит через один из промежуточных городов "abcd" и заканчивается E:
например. SabcdE, SacbdE и т.д ...
Имея только 4 промежуточных города, вы перечисляете все 24 перестановки. Для каждой перестановки используйте свой кратчайший двухточечный алгоритм, чтобы вычислить путь от головы до хвоста и его общее расстояние.
Тогда, учитывая начальную и конечную точку, есть 12 возможностей, привязанных к одному из abcd и для каждых двух возможностей для интерьера. Вы уже вычислили эти расстояния, поэтому вы добавляете расстояние от S до головы и от хвоста до E. Выберите минимум. Поэтому, предварительно рассчитав промежуточные расстояния для фиксированного набора внутренних городов, вам нужно выполнить 12 двухточечных задач кратчайшего пути для любой пары начальной и конечной точек.
Это явно плохо масштабируется с увеличением количества промежуточных городов. Мне не ясно, что это могло бы быть лучше, если вы не наложите более строгие ограничения на структуру графа (это в физическом евклидовом пространстве? Неравенство треугольника?).
Пример моей мысли: предположим, что все промежуточные расстояния между городами O (1). Без ограничения на графике, расстояние от S до любого промежуточного города может быть 1000, за исключением одного, равного 1. То же самое для хвоста. Таким образом, вы можете заставить первый город, который будет посещен, быть чем угодно. Теперь, пройдите на один слой вниз, возьмите первый город в качестве «начальной точки». Примените тот же аргумент: вы можете выбрать лучший путь для любого из следующих городов, манипулируя расстояниями на графике.
Так что, кажется, что сложность не может быть решена без дополнительных предположений.