1

我使用适用于 Hugs 98 的 updown/alternating permutation 问题的成功列表得到以下解决方案:

updown :: (Ord a) => [a] -> [[a]]
updown []         = [[]]
updown list       = smaller list

bigger :: (Ord a) => [a] -> [[a]]
bigger []         = [[]]
bigger [x]        = [[x]]
bigger list       = [n:p | n <- list,p <- smaller (filter (/=n) list),n < p!!0]

smaller :: (Ord a) => [a] -> [[a]]
smaller []        = [[]]
smaller [x]       = [[x]]
smaller list      = [n:p | n <- list,p <- bigger (filter (/=n) list),n > p!!0]   

如您所见,该功能使用 LoS 过滤掉所有不合适的解决方案。现在我想知道如何获得相同的结果,但是通过使用显式回溯(在累积参数中构建一个部分解决方案;在递归中进一步会有一个解决方案)。我只需要在正确的方向上轻轻一点。谢谢!

4

0 回答 0