7

可能最好用一个小例子来说明。
鉴于关系

A < B < C
A < P < Q 

正确的输出将是

ABCPQ or APQBC or APBCQ ... etc.

换句话说,任何给定关系成立的排序都是有效的。

我对最容易实现的解决方案最感兴趣,但速度和时间上最好的 O(n) 也很有趣。

4

3 回答 3

9

这称为拓扑排序

标准算法是输出一个最小元素,然后将其删除并重复直到完成。

于 2009-01-26T18:32:16.257 回答
1

做几种。先按照第一个规则排序,然后按照第二个规则排序,以此类推。应该有效,除非您的规则包含矛盾。确实很容易实现。

于 2009-01-26T18:02:56.877 回答
1

您可以使用手头的序列在 C++ 中重复调用 make_heap、pop_heap。

于 2009-01-26T18:55:46.380 回答