TSP旅行商问题的C++解决方案

    首先解释下什么是TSP问题。

TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。

假设从顶点i出发,令d(i, V')表示从顶点i出发经过V'中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,V'=V-{i},于是,TSP问题的动态规划函数为:
d(i,V')=min{cik+d(k,V-{k})}(k∈V')                                                                                                                                                        d(k,{})=cki(k≠i)

城市0出发经城市1、2、3然后回到城市0的最短路径长度是:
d(0,{1, 2, 3})=min{c01+d(1, { 2, 3}), c02+d(2, {1, 3}), c03+d(3, {1, 2})}

这是最后一个阶段的决策,而:
d(1, {2, 3})=min{c12+d(2, {3}), c13+ d(3, {2})}
d(2, {1, 3})=min{c21+d(1, {3}), c23+ d(3, {1})}
d(3, {1, 2})=min{c31+d(1, {2}), c32+ d(2, {1})}
这一阶段的决策又依赖于下面的计算结果:
d(1, {2})= c12+d(2, {})   d(2, {3})=c23+d(3, {}) 
d(3, {2})= c32+d(2, {})  d(1, {3})= c13+d(3, {})
d(2, {1})=c21+d(1, {})   d(3, {1})=c31+d(1, {})

最后填表如下图即程序中数组d      

/*author caoxulei 2010.12.26 20:38 email [email protected]*/ #include #include using namespace std; #define N 4 #define M 8 #define MAX 1000 int V_rmv(int k,int arr[N-1],int V[M][N-1])//返回{{V}-k}其d数组的列号 { int i; int temp_arry[N-1]; for(i=0;i

你可能感兴趣的:(IT,C++,c++,c,ini,email,2010)