题目:有向无环图中一个节点的所有祖先
题目描述
代码与解题思路
func getAncestors(n int, edges [][]int) [][]int {
g := make([][]int, n)
for _, e := range edges {
x, y := e[0], e[1]
g[x] = append(g[x], y)
}
ans := make([][]int, n)
vis := make([]int, n)
start := 0
var dfs func(int)
dfs = func(x int) {
vis[x] = start+1 // 因为 vis 初始是 0, 所以要 +1 错开
for _, v := range g[x] {
if vis[v] != start+1 {
ans[v] = append(ans[v], start)
dfs(v)
}
}
}
for start < n {
dfs(start)
start++
}
return ans
}
采用思路:灵神的题解
这道题的核心就在于如何解决重复遍历的问题,用什么方法都做