解题思路
本题属于抽象树的题目,题目给定的条件当中并没有给出树的结构,需要我们根据题目当中给定的已知条件创建一颗N叉树,然后再进行深度遍历。
有向图BFS基本套路:
1、先构造一张邻接表,记录上级与下属的一对多关系。
2、使用队列做BFS遍历,队列中的节点使用自定义对象:节点id和到达节点的时间,其中时间是上级节点的到达时间加上级节点到此节点的路程时间。
3、遍历中使用函数变量记录最大时间值。
示例代码
func numOfMinutes(n int, headID int, manager []int, informTime []int) int {
graph := map[int][]int{}
for i, v := range manager {
if q, ok := graph[v]; ok {
graph[v] = append(q, i)
} else {
graph[v] = []int{i}
}
}
queue := []*Node{&Node{
id: headID,
time: 0,
}}
maxTime := 0
for len(queue) > 0 {
node := queue[0]
queue = queue[1:]
for _, next := range graph[node.id] {
curTime := node.time + informTime[node.id]
queue = append(queue, &Node{
id: next,
time: curTime,
})
maxTime = max(curTime, maxTime)
}
}
return maxTime
}
func max(a, b int) int {
if a > b {
return a
} else {
return b
}
}