/*
如果对于任意数目的n个城市,分别用1~n编
号,则这个问题归结为在有向带权图中,寻找一
条路径最短的哈密尔顿回路问题。
这里,V表示城市顶点,(i,j) ∈E 表示城市之
间的距离,用邻接矩阵C表示城市之间的距离。
思想:
1设d(i,V-{i})表示从顶点i出发,经过V-{i}中各顶点一次,回到顶点i的最短路径长度
2d(i,V-{i}) = d(i,|V) = k属于V min{Cik,d(i,!V - {k})}
3边界:d(k,空集) = Cki,k!= i,从顶点k出发,不经过任何顶点,回到顶点i的长度,自然是Cki
4目标状态:d(0,{1,2,3})
难点:如何标识这个集合V,难道用标记法,这是集合上的动态规划问题,可以通过位来进行操作
0001表示第i个节点选中
那初始时:1111...1110
n-1个1 1个0
输入说明:0标识不可达
输入:
4
0 3 6 7
5 0 2 3
6 4 0 2
3 7 5 0
4
0 8 5 6
6 0 8 5
7 9 0 5
9 7 8 0
输出:
10
23
难点:
1到底递归求的是什么?
分析即所得,求的是集合
求的是:d(i,V-{i}) = d(iStart,iFull - (1<<iStart) )
2递归传入的参数是什么?
iSart,初始节点,除去初始节点的剩余节点集合,为一个数
3递归基是什么?
递归基是:如果碰到已经求过的,则直接返回;碰到i != g_iStart && s == 0,返回g_dp[i][s] = g_iArr[i][g_iStart];
4如何挑选k?
for(int k = 0 ;
算法设计与分析:第四章 动态规划 4.2TSP之货郎担问题
最新推荐文章于 2023-09-19 17:28:49 发布
本文探讨了使用动态规划解决旅行商问题(TSP)的一个变种——货郎担问题。通过邻接矩阵表示城市之间的距离,并介绍了动态规划的思路,包括状态定义、递归公式和边界条件。文章提供了C语言实现的记忆化搜索算法,以找到从特定起点出发,经过所有城市一次并返回的最短路径长度。
摘要由CSDN通过智能技术生成