美文网首页
拓扑排序

拓扑排序

作者: 克罗地亚催眠曲 | 来源:发表于2022-08-28 16:12 被阅读0次

    拓扑排序是一个常用的算法片段,但是在周赛中有时候不是很容易写出来。在这里记录下

    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]
    }
    

    相关文章

      网友评论

          本文标题:拓扑排序

          本文链接:https://www.haomeiwen.com/subject/cqaqnrtx.html