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

2021-10-05 16:27:59 字數 1851 閱讀 9946

tsp問題是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路線圖最短。無窮3

675無窮

2364

無窮267

5無窮待補充

#define _crt_secure_no_warnings

#include

#include

using

namespace std;

struct subset //此結構體表示我們的每個子集

;struct point

;int

get_subset_num

(int num)

return sum;

}void

cal_subset

(subset* psubset,

int num,

int*array)

int pre =1;

int ord =4;

//pre和ord夾著一層子集,初始的時候夾著元素個數為1的子集

int now = ord +1;

//當前需要計算的子集在子集陣列中的下標

for(

int i =

0; i < num-

1; i++)}

pre = ord +1;

//更換夾層

ord = now -1;

}}bool

cmp_vector

(vector<

int> a, vector<

int> b)

else

if(size_1 ==0)

else}}

return

true;}

intmain()

cal_subset

(psubset, num, array)

;int

** distance_matrix =

newint

*[num]

;int

** path_matrix =

newint

*[num]

;for

(int i =

0; i < num; i++

)for

(int i =

0; i < num; i++

)for

(int i =

0; i < num; i++)}

for(

int i =

0; i < num; i++)}

for(

int i =

1; i < num; i++

)for

(int i =

1; i < subset_num; i++

)int index;

for(

int l =

0; l < subset_num; l++)}

if(distance_matrix[array[j]][

*element]

+ path_matrix[

*element]

[index]

< min)

} path_matrix[j]

[i]= min;}}

}}

暴露的問題

對於stl庫的使用和理解不深,出現了很多因不了解實際內部機制而出現的問題。

比如說vector的==比較不是值比較,應該是位址比較,如果比較vector最好是自己寫函式來比較。

還有vector中erase方法的兩大誤區,產生野迭代器等。

所以之後如果有時間,一定要看看stl的原始碼,並分析一下。

TSP問題,動態規劃法

tsp問題是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路程最短。各個城市間的距離可以用代價矩陣來表示。假設從頂點i出發,令d i,v 表示從頂點i出發經過v 中各個頂點一次且僅一次,最後回到出發點i的最短路徑長度,開始時,v v 於是,tsp問題的動態規劃函式...

動態規劃法求解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 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...