拓扑排序 Topological-Sort(G)
1.选择入度为0的结点作为起始结点,输出该结点
2.将相连结点的入度减1
3.继续执行1,2直到遍历完成
Topological-Sort(G)
Input: A graph G
Output: None
步骤1:构建一个空队列Q
Initialize Q to be an empty queue;
步骤2:遍历图中所有结点,将入度为0的结点加入队列Q
for 𝑢 ∈ 𝑉 do
if 𝑢. 𝑖𝑛_𝑑𝑒𝑔𝑟𝑒𝑒 𝑖𝑠 𝑒𝑞𝑢𝑎𝑙 𝑡𝑜 0 then
Enqueue(𝑄, 𝑢); //Find all starting vertices
end
end
步骤3:遍历Q中结点,直到队列Q中为空
while 𝑄 𝑖𝑠 𝑛𝑜𝑡 𝑒𝑚𝑝𝑡𝑦 do
步骤3.1:输出队列结点u
𝑢 ←Dequeue(𝑄);
Output 𝑢;
步骤3.2:遍历结点u的所有子结点,入度减一,如果出现入度为0的结点,加入队列Q
for 𝑣 ∈ 𝐴𝑑𝑗(𝑢) do
//remove u’s outgoing edges
𝑣. 𝑖𝑛_𝑑𝑒𝑔𝑟𝑒𝑒 ← 𝑣. 𝑖𝑛_𝑑𝑒𝑔𝑟𝑒𝑒 −1;
if 𝑣. 𝑖𝑛_𝑑𝑒𝑔𝑟𝑒𝑒 𝑖𝑠 𝑒𝑞𝑢𝑎𝑙 𝑡𝑜 0 then
Enqueue(𝑄, 𝑢);
end
end
end