这篇博客文章讨论了拓扑排序的一个有趣变化:http: //jdh.hamkins.org/linear-gradings-of-partial-orders/
偏序的线性分级就像拓扑排序一样,除了在允许的情况下,顶点可以在输出中共享一个“级别”。
如何实现一个程序(例如在 Haskell 中)来找到偏序(即 DAG)的所有线性分级?
以博文中的插图为例,拓扑排序可以很容易地找到排序 [[1], [2, 3, 4], [5]]。然后是 Haskell 程序
map concat $ sequence $ map concat $ map (map permutations) $ map partitions [[1],[2,3,4],[5]]
似乎产生了正确的结果。不过,我认为这段代码不能正确解决一般情况。