题目大意,就是给出a和b点的横坐标,求到a,b的最小行动次数,其中每次行动只能是下面两种情况之一
- 向左或向右移动一步,即横坐标加1或者减1
- 横坐标变成原来的两倍
对于题目给出的数据5 17 , 可以这样进行行动 5 – 10 – 9 – 18 – 17 所以只需要四步就可以到达b
这题因为是求最小行动次数,故可以用BFS,调用STL里面的队列来实现。每次去队首元素,如果到达了b点,输出步子并结束搜索,否则,行动步子+1,并分别将改点的横坐标+1,-1,×2操作后压入队列,一直到寻找到解。注意到当位置的横坐标超过了b点就应该再向右走,故此时应该对其横坐标只有-1操作,还要注意到横坐标为0的特殊情况,此处应该只进行+1行走
刚开始的时候把标记数组开小了,没注意到×2可能会出现超过100,000的情况,提交时RE了一次,把数组改打就AC了
1 |
|