通过显式回溯的上升/交替排列

时间:2013-10-18 09:36:19

标签: haskell

我使用成功列表获得了以下解决方案,用于在Hugs 98中使用的更新/交替排列问题:

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的非拟合解决方案。现在我想知道如何获得相同的结果,但是使用显式回溯(在累积参数中构建一个部分解决方案;在递归中还有一个解决方案)。我只需要朝正确的方向微调。 谢谢!

0 个答案:

没有答案