可能最好用一个小例子来说明。
鉴于关系
A < B < C
A < P < Q
正确的输出将是
ABCPQ or APQBC or APBCQ ... etc.
换句话说,任何给定关系成立的排序都是有效的。
我对最容易实现的解决方案最感兴趣,但速度和时间上最好的 O(n) 也很有趣。
可能最好用一个小例子来说明。
鉴于关系
A < B < C
A < P < Q
正确的输出将是
ABCPQ or APQBC or APBCQ ... etc.
换句话说,任何给定关系成立的排序都是有效的。
我对最容易实现的解决方案最感兴趣,但速度和时间上最好的 O(n) 也很有趣。
这称为拓扑排序。
标准算法是输出一个最小元素,然后将其删除并重复直到完成。
做几种。先按照第一个规则排序,然后按照第二个规则排序,以此类推。应该有效,除非您的规则包含矛盾。确实很容易实现。
您可以使用手头的序列在 C++ 中重复调用 make_heap、pop_heap。