おそらくこれは、「各可能性を手動で繰り返し、最短経路を保存する」という元のポスターの意味ですが、ベースライン ソリューションと思われるものを明示したいと思いました。
すでに 2 点最短経路アルゴリズムがあると仮定します。これには、さまざまな種類のグラフに対する古典的なソリューションがあります。すべての距離が非負であり、d(A->B->C) = d(A->B) + d(B->C) であると仮定します。
要点は、パスが S で始まり、中間都市「abcd」の 1 つを通り、E で終わることです。
例:SabcdE、SacbdE など...
中間都市が 4 つしかないため、24 の順列すべてを列挙します。順列ごとに、最短の 2 点アルゴリズムを使用して、頭から尾までの経路とその合計距離を計算します。
次に、開始点と終了点が与えられると、abcd の 1 つに接続する 12 の可能性と、それぞれの内部の 2 つの可能性があります。これらの距離は既に計算されているので、S から頭まで、尾から E までの距離を追加します。最小値を選択します。したがって、内陸都市の固定セットの中間距離を事前に計算したら、始点と終点の任意のペアに対して 12 の 2 点最短経路問題を実行する必要があります。
これは、中間都市の数が増えると、明らかにスケーリングが不十分になります。グラフ構造に大きな制限を課さない限り、それがうまくいくかどうかは私には明らかではありません (これは物理的なユークリッド空間にありますか? 三角形の不等式ですか?)。
私の考えた例: 都市間のすべての中間距離が O(1) であるとします。グラフに制限がない場合、S から任意の中間都市までの距離は、1 を除いて 1000 になる可能性があります。テールについても同じです。したがって、最初に訪問する都市を強制的に任意にすることができます。次に、1 層下に移動し、最初の都市を「開始点」とします。同じ引数を適用します。グラフの距離を操作することで、次の都市のいずれかに最適なパスを作成できます。
したがって、追加の仮定がなければ、複雑さは避けられないようです。