寻友之旅(BFS) | 「青训营 X 码上掘金」主题创作

108 阅读2分钟

当青训营遇上码上掘金,会发生什么事呢 🤯

今天中午醒来看到这么一道题:

小青要找小码去玩,他们的家在一条直线上,当前小青在地点 N ,小码在地点 K (0≤N , K≤100 000)
小码在自己家原地不动等待小青。

小青有两种交通方式可选:步行和公交。  
步行:小青可以在一分钟内从任意节点 X 移动到节点 X-1 或 X+1  
公交:小青可以在一分钟内从任意节点 X 移动到节点 2×X (公交不可以向后走)

请帮助小青通知小码,小青最快到达时间是多久?
输入: 两个整数 N 和 K  
输出: 小青到小码家所需的最短时间(以分钟为单位)

怎么写呢🧐


下面是我的做法,使用了广度优先搜索BFS的思想。

简单来说,就是从起点出发,不断探索地图中能够到达的点,直到探索到终点。

具体来说,起点到起点不需要时间,也就是所需时间为0,这是我们已知的条件;而题目给了三种方法,也就是后退一格、前进一格和前进到2*x格,这三种操作都需要一分钟,那么就可以从需要时间最少的起点出发,寻找一分钟内能够到达的位置,再以此类推,一步一步找到终点。因为队列的先进先出特性,先加入到队列的元素会先被取出,而我们又是从所需时间最少的地方出发一步步探索的,所以每次从队列里取到的总是未处理位置里需要时间最少的一个位置。

这里是代码↓


你觉得这题难度如何呢