leetcode 815. Bus Routes

leetcode 815. Bus Routes


原题地址:https://leetcode.com/problems/bus-routes/
代码转载自:https://leetcode.com/problems/bus-routes/discuss/122723/Python-Simple-BFS

题目

We have a list of bus routes. Each routes[i] is a bus route that the i-th bus repeats forever. For example if routes[0] = [1, 5, 7], this means that the first bus (0-th indexed) travels in the sequence 1->5->7->1->5->7->1->… forever.

We start at bus stop S (initially not on a bus), and we want to go to bus stop T. Travelling by buses only, what is the least number of buses we must take to reach our destination? Return -1 if it is not possible.

Example:
Input: 
routes = [[1, 2, 7], [3, 6, 7]]
S = 1
T = 6
Output: 2
Explanation: 
The best strategy is take the first bus to the bus stop 7, then take the second bus to the bus stop 6.

Note:

  • 1 <= routes.length <= 500.
  • 1 <= routes[i].length <= 500.
  • 0 <= routes[i][j] < 10 ^ 6.

python代码(BFS)

from collections import defaultdict
from collections import deque
class Solution:
    def numBusesToDestination(self, routes, S, T):
        """
        :type routes: List[List[int]]
        :type S: int
        :type T: int
        :rtype: int
        """
        if S==T:
            return 0
        visitedLine = set()
        visitedStop = set()
        stopToRoute = defaultdict(list)
        for i,route in enumerate(routes):
            for stop in route:
                stopToRoute[stop].append(i)
        Queue = deque([])
        visitedStop.add(S)
        for routeNumber in stopToRoute[S]:
            visitedLine.add(routeNumber)
            Queue.append([routes[routeNumber], 1])
        while len(Queue):
            route, take = Queue.popleft()
            for stop in route:
                if stop == T:
                    return take
                elif stop not in visitedStop:
                    visitedStop.add(stop)
                    for routeNumber in stopToRoute[stop]:
                        if routeNumber not in visitedLine:
                            Queue.append([routes[routeNumber],take+1])
        return -1

版权声明:转载注明 http://blog.csdn.net/birdreamer/article/details/79850146

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值