2021-12-04:公交路线。给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。 例如,路线 routes[0]

2021-12-04:公交路线。给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。
例如,路线 routes[0] = [1, 5, 7] 表示第 0 辆公交车会一直按序列 1 -> 5 -> 7 -> 1 -> 5 -> 7 -> 1 -> … 这样的车站路线行驶。
现在从 source 车站出发(初始时不在公交车上),要前往 target 车站。 期间仅可乘坐公交车。
求出 最少乘坐的公交车数量 。如果不可能到达终点车站,返回 -1 。
来自力扣815。
来自三七互娱。

答案2021-12-04:

以公交线做宽度优先遍历。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    routes := [][]int{{1, 2, 7}, {3, 6, 7}}
    source := 1
    target := 6
    ret := numBusesToDestination(routes, source, target)
    fmt.Println(ret)
}

func numBusesToDestination(routes [][]int, source, target int) int {
    if source == target {
        return 0
    }
    n := len(routes)
    // key : 车站
    // value : list -> 该车站拥有哪些线路!
    map0 := make(map[int][]int)
    for i := 0; i < n; i++ {
        for j := 0; j < len(routes[i]); j++ {
            if _, ok := map0[routes[i][j]]; !ok {
                map0[routes[i][j]] = make([]int, 0)
            }
            map0[routes[i][j]] = append(map0[routes[i][j]], i)
        }
    }
    queue := make([]int, 0)
    set := make([]bool, n)
    for _, route := range map0[source] {
        queue = append(queue, route)
        set[route] = true
    }
    len0 := 1
    for len(queue) > 0 {
        nextLevel := make([]int, 0)
        for _, route := range queue {
            bus := routes[route]
            for _, station := range bus {
                if station == target {
                    return len0
                }
                for _, nextRoute := range map0[station] {
                    if !set[nextRoute] {
                        nextLevel = append(nextLevel, nextRoute)
                        set[nextRoute] = true
                    }
                }
            }
        }
        queue = nextLevel
        len0++
    }
    return -1
}

执行结果如下:
图片


左神java代码

posted @   福大大架构师每日一题  阅读(18)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2020-12-04 2020-12-04:mysql 表中允许有多少个 TRIGGERS?
2020-12-04 2020-12-03:mysql中,Heap 表是什么?
2020-12-04 2020-12-02:mysql中,一张表里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ?
2020-12-04 2020-12-01:java中,什么是安全点和安全区域?
2020-12-04 2020-11-30:java中,卡表和记忆集的区别?
点击右上角即可分享
微信分享提示