H城市舉辦馬拉松比賽。比賽區域有 N個補給站,2≤N≤1000。為了方便說明,我們將N個補給站名稱以正整數1,2,…,N來表示。 N個補給站有街道來連接,使得選手可從任一個補給站出發,經由幾條街道抵達另一個補給站。我們可以用圖形來表示這些補給站跟街道之間的關係:節點表示補給站,而連接節點的連結線則代表連接兩個補給站之間的街道(如圖一所示,其中補給站名稱以圓圈內的數字來表示,而街道上的數字則代表跑完此街道所需花費的時間)。我們以符號(I,J)來表示連接補給站I和補給站J的街道(連結線)。每一條街道 (I,J)都結合一個整數的權重值c(I,J)來代表跑完(I,J)這條街道所要花費的時間,其中c(I,J)需滿足 1≤c(I,J)≤999。令 Nodd 代表那些與奇數條街道相接的補給站個數,則H城市有一個重要特性:Nodd 為偶數且 0 ≤ Nodd ≤20。 |
给定一個起點補給站S和終點補給站T (S≠T),請寫一個程式計算選手從起始補給站S出發,把每條街道都跑過至少一次且到達終點補給站 T所需花費的最短時間。注意:這個城市中所有的街道都是雙向道,同一個補給站和街道可被重複經過。 圖一 |
在圖一的例子中,Nodd =0,S=1,T=6。圖二說明其中一種跑法為:S=1→3
→2→1→2→4→3→5→2→4→5→6→4→6=T,可在 15單位時間從起點出發,將所有街道都跑過至少一次,且到達終點。然而此種跑法所需的時間並非最短。事實上,此例中花費時間為最短的跑法如圖三所示,為 1→2→3→1→3→4→2→5 |
→3→5→4→6→5→6,所花費時間為 14單位。
圖二