是否有一种算法,给定一个未加权的有向无环图,将所有节点排序到节点集列表中,使得
u->v
,v
出现在列表中比u
更靠下的集合中)并且这个问题有名字吗?
下图的可能排序是
[1], [2, 3], [4, 5], [6, 7]
另一种解决方案是
[1], [2, 3], [4], [5, 6, 7]
考虑规范卡恩算法的这种变体:
从
n = 0:
开始
S_0 ... S_k
集合的列表包含结果。
如果每个节点没有前驱,则将其阶段索引定义为零,或者将其前驱的最大阶段索引加一。将每个节点放入指定的阶段。
可以按拓扑顺序有效地评估阶段索引,这使其成为您最喜欢的拓扑排序算法的轻松扩展。