项目里突然出现了一个类似TSP旅行商的问题,稍微有点儿变动的可能是需要指定终点,而不是回到起点。
因为项目里设计规划的点的比较少(<20)又要求比较准确,所以采用了动态规划法。
动态规划算法的定义就不多做介绍了, 下面直接来到解决思路。
假设有N个城市,dp[N][N]这个二维数组保存了 各个城市之间的距离
那么问题就可以简化为 从0(p)点出发到还未走过的城市集合 S(N-1)的最短距离
定义为 min_distance(S, 0) ,
假设第二个到达城市j,那么剩下的最短距离min_distance(S-j,j) (S-j 表示S集合去掉j点,先这么表示,后面具体再说)
就有min_distance(S, 0) = min_distance(S-j, j) + dp[j][0],这也就是我们的递归公式
如果我们要取最小值的话 上面的j城市就要遍历从 1 到 (N-1)