1. 问题基本描述:
求一个旅行商经过N 个城市最后回到出发点的最短路径.
即,在一个无向带权图的邻接矩阵中,求一个最短环包括所有顶点. 坚
2. 解法: ,
合
结
1) 动态规划: 做
学
假设从顶点i 出发,令d(i,V’)表示从顶点i 出发经过V’ 中各个顶点一次且仅一
持
次,最后回到出发点i 的最短路径的长度,开始时,V’=V-{i} ,于是,旅行商问题的
坚
动态规划函数为: 要
d(i,V’) = min{cik + d(k,V’-{k})} (k∈V’) 员 1)
d(k,{}) = cki (k ≠ i) 党 2)
体
简单来说,就是用递归表达:从出发点0 到1 号点,假设1 是第一个,则剩下的
全
路程就是从1 经过剩下的点最后回到0 点的最短路径. 所以当V’为空的时候,
。
d(k,{}) = c (k ≠ i), 找的是最后一个点到0 点的距离.递归求解1 之后,再继续求
ki 业 个
V’之中剩下的点,最后找出min. 三
立 “
如果按照这个思想直接做,对于每一个i 都要递归剩下的V 中所有的点,所以
功 展
这样的时间复杂度就近似于N!,其中有很多重复的工作.
建 开
可以从小的集合到大的集合算,并存入一个二维数组,这样当加入一个节点
、 )
时,就可以用到之前的结果,如四个点的情况:
为 二
邻接矩阵:
有 (
发 node 0 1 2 。 3
奋 会
中 0 5 3 2
”