我需要一种算法来计算给定树结构的所有可能的排列,例如:
4 3
\ |
\ 2
\ /
1
这意味着,(4)需要在(1),(3)之前(2)和(2)之前(1)之前订购。因此输出应包含以下所有且不超过以下内容:< / p>
[4,3,2,1]
[3,4,2,1]
[3,2,4,1]
无效的订单例如是
[4,2,3,1]
因为(2)在(3)之前,但是(2)是图中(3)的后继。简单地计算所有排列并过滤无效排序不会出于效率的原因。
我不需要确切的代码,通常可以做到这一点的想法已经非常有用了。
答案 0 :(得分:1)
这个问题是对有向图进行拓扑排序
它可以通过DFS以时间复杂度O(E + V)来解决。
http://en.wikipedia.org/wiki/Topological_sorting
答案 1 :(得分:0)
如果有人仍然对此感兴趣,我的问题的算法已经在70年代由Varol和Rotem在他们的论文中提出“生成所有拓扑排序安排的算法”。
实际上搜索拓扑排序可以帮助我更早地找到解决方案,但是,文章可以在这里找到:http://comjnl.oxfordjournals.org/content/24/1/83.abstract