简介
TSP全称为Travelling Salesman Problem(旅行商问题),通俗而言,它是指对于给定的一系列城市和每对城市之间的距离,找到访问每一座城市仅一次并回到起始城市的最短回路。
由于求精确解的时间复杂度很大,衍生出了很多近似算法,不过在这里不讨论,我们在这里只讨论精确解DP算法
- 有n个城市,从起点 0 开始游历每一个城市,只访问每个城市一次,最后回到起点,所需要的最短路径是多少?
- 定义dp[S][i] ,S为集合即已经走过的城市,但是从0个城市到所有城市的集合太多了,所以我们采用状态压缩,便于遍历。dp[S][i] 即在i点结束,集合S中每个点恰好走过一次时的最短路长度
- 所以最终答案是 min(dp[S][i]),S为所有城市,i的话每个点都可能是终点。
容易得出以上状态转移方程,即dp[S][i] = min(不包括 i 的集合 + j 到 i 的距离)
上图有些错误,应该是 dp[S-{i}] ,下面看代码
参考代码,模板:
|
943.最短超级串:
|