TSP問題,動態規劃法

2021-08-20 00:01:58 字數 679 閱讀 8194

tsp問題是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路程最短。各個城市間的距離可以用代價矩陣來表示。

假設從頂點i出發,令d(i, v')表示從頂點i出發經過v'中各個頂點一次且僅一次,最後回到出發點i的最短路徑長度,開始時,v'=v-,於是,tsp問題的動態規劃函式為:

d(i,v')=min)}(k∈v')

d(k,{})=cki(k≠i)

偽**:

for (i=1; i筆者在寫此程式時卡在了如何判斷:子集v[j]中不包含i。解決方法是對n個頂點分別用0~n-1的數字編號,按個數為1,2,……,n-1的順序生成1~n-1個元素的子集存放在陣列v[2^n-1]中。這樣,在判斷時就可以將當前點與陣列編號按位與運算(如下圖所示),為0則為需要進行計算(這時才能品味按位與運算的美)。

完整**:

#include#includeint main()

free(route);

free(mat);

return 0;

}

TSP問題(利用動態規劃法)

tsp問題是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路線圖最短。無窮3 675無窮 2364 無窮267 5無窮待補充 define crt secure no warnings include include using namespace std str...

動態規劃法求解TSP問題 C

此文章借鑑於博文在此基礎上重新進行了分析總結。1 怎麼求頂點子集,即這些怎麼記錄?答 例如4個頂點,依次為 十進位制數0 1 2 3 4 5 6 7的二進位制分別為000 001 010 011 100 101 110 111。上述集合中的元素即為二進位制中的位數,例如集合,可用二進位制110 十進...

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...