题意
有一个 N N N( N ≤ 1000 N\leq1000 N≤1000)位密码锁,,每位都是0~9,可以循环旋转。 每次可以让1~3个相邻数字同时往上或者往下转一格。 例如,567890->567901(最后3位向上转)。 输入初始状态和终止状态(长度不超过1000),问最少要转几次。 例如,111111到222222至少转2次,由896521到183995则要转12次。
思路
首先从搜索的角度上去想解题过程。由于每一位都必须转到终止状态,所以可以从第一位开始搜索把每一位移到正确位置并且旋转了1 ~ 3个相邻数字需要的最小步数。但是这样复杂度显然太高,但是我们可以观察到假设当前位置为 x x x,那么当 x x x, x + 1 x + 1 x+1, x + 2 x + 2 x+2的值被计算过了以后就不需要再重复计算了。
也就是说,当四元组 ( x , A x , A x + 1 , A x + 2 ) (x, A_x, A_{x+1}, A_{x+2}) (x,Ax,Ax+