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