一、理论基础
TSP问题即旅行商问题,经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的哈密尔顿回路。
旅行商问题有很多种不同的问法,最近做了几个关于TSP的题,下面总结一下。由于大部分TSP问题都是NP-Hard的,因此很难得到什么高效的多项式级别的算法,一般采用的算法都偏向于暴力搜索以及状压DP,这里都采取用状压DP解决。大部分TSP问题所给的地点数目都非常小。
考虑经典的TSP问题,如果采用状压DP,将每个地点访问与否作为二进制1/0压缩,不难得到状态转移方程:
dp[S][i] = min(dp[S][i], dp[S ^ (1 << (i - 1))][k] + dist[k][i])
S代表当前状态,i(从1开始)表示到达当前状态时最后访问的是第i个地点
k为S中所有访问的与i不同的地点。
dist表示两点间最短路。
以及初始化:
DP[S][i] = dist[start][i](S == 1<<(i - 1))
如果初次遇到状压dp&#x