拓扑排序是一个常用的算法片段,但是在周赛中有时候不是很容易写出来。在这里记录下
func topSort(k int, edges [][]int) []int {
g := make([][]int, k)
ind := make([]int, k)
for _, e := range edges {
x, y := e[0]-1, e[1]-1
g[x] = append(g[x], y)
ind[y]++
}
q := make([]int, 0, k)
orders := q
for i, d := range ind {
if d == 0 {
q = append(q, i)
}
}
for len(q) > 0 {
x := q[0]
q = q[1:]
for _, y := range g[x] {
if ind[y]--; ind[y] == 0 {
q = append(q, y)
}
}
}
if len(q) > 0 {
// 图中有环
return nil
}
return orders[:k]
}
网友评论