变量定义
- V V V:全部的点集合
- S S S:访问过的顶点的集合,初始 S = { s } S=\{s\} S={s}
- d i s ( i , j ) dis(i, j) dis(i,j):点 i i i到 j j j的距离,使用邻接矩阵存储图的边长
- d ( S , i ) d(S,i) d(S,i):从出发点开始,访问了 S S S中全部的点,且当前在 i i i点,所需的最短路径
递推方程
- 设出发点是s,则 d ( { s } , s ) = 0 d(\{s\},s)=0 d({s},s)=0
- 对于 V − S V-S V−S中全部的点 i i i,有 d ( S ⋃ { i } , i ) = min j ∈ S ( d ( S , j ) + d i s ( j , i ) ) d(S\bigcup \{i\},i)=\min\limits_{j\in S}(d(S,j)+dis(j,i)) d(S⋃{i},i)=j∈Smin(d(S,j)+dis(j,i))也就是已经到达了 S S S集合,接下来到 i i i,是从 j j j点到达 i i i点的。
- 最终求出了 ∣ V ∣ |V| ∣V∣个 d ( V , i ) d(V,i) d(V,i)值, T S P TSP TSP问题的答案就是 a n s = min i ∈ V ( d ( V , i ) + d i s ( i , s ) ) ans=\min\limits_{i\in{V}}(d(V,i)+dis(i,s)) ans=i∈Vmin(d(V,i)+dis(i,s))也就是加上回到原点的距离。