当青训营遇上码上掘金
本文是 青训营 X 码上掘金活动第四题 “巡友之旅” 的解法。
寻友之旅
小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000),并且小码在自己家原地不动等待小青。小青有两种交通方式可选:步行和公交。
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)
请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K
输出: 小青到小码家所需的最短时间(以分钟为单位)
作者:青训营官方账号
链接:juejin.cn/post/718775…
这道题实际类似于“抓住那头牛”(USACO2007 , kuangbin专题 , POJ3278)这道题
在每个位置可以进行三种选择
- 若
X > 0,则可以X - 1 - 若
X + 1 < N,则可以X + 1 - 若
2X < N,则可以2X
针对这道题,可以选择BFS算法
通过BFS的思路的话,那么就是不要只把他停留在一个一维数轴上的点了,而是变为一张图
当处在x节点上,可以选择走到x-1,x+1,2x节点上
我们则需要去找到n->k之间的最短的移动路径
判断节点与节点之间是否连接,则是刚刚上面所说的三个条件
X>0即为X与X-1相互连接X+1<N即为X与X+1相互连接2X<N即为X与2X相互连接
使用宽度优先搜索算法,有一个特性就是最早搜到的节点就是最近的,于是可以从n节点上使用bfs去搜索k节点,在搜索过程中记录各节点到n节点的距离