Skip to content
陈广亮的技术博客
Go back

拓扑排序

拓扑排序是将有向无环图(DAG)的所有顶点排成线性序列,使得边 (u,v) 中 u 出现在 v 之前。

func topoSort(m map[string][]string) []string {
    var order []string
    seen := make(map[string]bool)
    var visitAll func(items []string)
    visitAll = func(items []string) {
        for _, item := range items {
            if !seen[item] {
                seen[item] = true
                visitAll(m[item])
                order = append(order, item)
            }
        }
    }
    var keys []string
    for key := range m {
        keys = append(keys, key)
    }
    sort.Strings(keys)
    visitAll(keys)
    return order
}

深度优先搜索:沿着树的深度遍历节点,尽可能深地搜索分支。当所有边都已探寻,搜索回溯到起始节点。


Share this post on:

Previous Post
Symbol.toPrimitive 与 JS 加法运算
Next Post
HTTP 缓存机制详解