例题 9-4 单向TSP(Unidirectional TSP,UVa116)
VJ传送门:https://cn.vjudge.net/problem/UVA-116
描述:
给定一个m行n列的矩阵(m <= 10, n <= 100),要求从第1列的任何一行出发,每次沿右或右下或右上到达后面一列,最后到第m列任何一行,使经过的整数之和最小,整个矩阵是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行。多解时输出字典序最小的。
分析:
在这个题目中,每一列就是一个阶段,每个阶段都有3种决策:直行、右上和右下。
状态定义:d(i,j)为从格子(i,j)出发到最后一列的最小开销。
题目要求输出字典序最小的解,则需要在计算d(i,j)的同时记录下下一列最小的行号(在满足最优性的前提下)。
代码: