拓扑排序

📌 核心概念

拓扑排序:将有向无环图(DAG)的所有顶点排成一个线性序列,使得所有有向边从前指向后。

应用场景:

  • 任务调度(前置依赖)
  • 课程安排
  • 编译顺序

💻 算法实现

🎯 经典应用

Go 代码

func topologicalSort(n int, edges [][]int) []int {
    graph := make(map[int][]int)
    inDegree := make([]int, n)
 
    for _, edge := range edges {
        u, v := edge[0], edge[1]
        graph[u] = append(graph[u], v)
        inDegree[v]++
    }
 
    queue := []int{}
    for i := 0; i < n; i++ {
        if inDegree[i] == 0 {
            queue = append(queue, i)
        }
    }
 
    result := []int{}
 
    for len(queue) > 0 {
        node := queue[0]
        queue = queue[1:]
        result = append(result, node)
 
        for _, neighbor := range graph[node] {
            inDegree[neighbor]--
            if inDegree[neighbor] == 0 {
                queue = append(queue, neighbor)
            }
        }
    }
 
    if len(result) != n {
        return []int{}
    }
    return result
}

🎯 经典题目

题目LeetCode关键点
课程表207检测环
课程表II210拓扑排序
课程表IV1462可达性

返回:图算法