from collections import deque
def find_min_time(N, K): queue = deque()//我们使用队列存储这个时候小青所在的当前位置和当前所用的时间 visited = [0]*100001//我们每次取出队中的首元素,那么如果这个时候位置已经到达小码家,那么这就返回我们所用的时间 queue.append(N) visited[N] = 1 //否则,我们立即更新当前位置为下一步可以到达的位置(选择步行或者乘公交),并将这个新位置和这个新时间加入队列。 while queue: cur = queue.popleft() //我们重复步骤2和3,直到找到最短路径 if cu
我们要解决这个问题,我们可以使用广搜,并用一个数组记录每个点到达时间。每次遍历到一个点,我们将它的下一个节点的所到达时间更新为当前节点的到达时间+1。我们可以使用队列来实现广搜。在遍历过程中,如果当前节点是终点,我们就可以结束遍历。 具体做法是: 1.我们使用队列存储这个时候小青所在的当前位置和当前所用的时间。 2.我们每次取出队中的首元素,那么如果这个时候位置已经到达小码家,那么这就返回我们所用的时间。 3.否则,我们立即更新当前位置为下一步可以到达的位置(选择步行或者乘公交),并将这个新位置和这个新时间加入队列。 4.我们重复步骤2和3,直到找到最短路径。 我们需要注意的是,在更新新位置时需要判断是否越界(超过100 000)或者已经访问过,以免重复计算。 这个算法会在每一步可行的位置都进行搜索,直到找到小码的家,所以因此时间复杂度为O(n)。