我需要订购一系列信封。每个信封的高度和宽度都有描述。如果可以将信封插入信封2中,则信封1小于信封2。如果信封1不能插入信封2中,反之亦然,那么它们就无法进行比较。
我如何在scala中订购这些信封?我无法在互联网上找到有关该信息的任何信息。
以下是我的一些代码:
object EnvelopeOrdering extends PartialOrdering[(Int, Int)] {
override def tryCompare(x: (Int, Int), y: (Int, Int)): Option[Int] = {
if (x._1 < y._1 && x._2 < y._2) return Some(1)
if (x._1 > y._1 && x._2 > y._2) return Some(-1)
if (x._1 == y._1 && x._2 == y._2) return Some(0)
None
}
override def lteq(x: (Int, Int), y: (Int, Int)): Boolean = x._1 < y._1 && x._2 < y._2
}
答案 0 :(得分:1)
您感兴趣的是topological sort,并且有一种经典算法可以按照边数的顺序执行复杂性。在您的情况下,当且仅当第一个信封较小时(边缘应从较小的边缘指向较大的边缘),您将在两个信封之间有边缘。