1

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 を使用して適合しないソリューションをすべて除外します。今、私は同じ結果を得る方法を考えていましたが、明示的なバックトラッキングを使用して (累積パラメーターに部分的な解決策を組み込みます。再帰のさらに先に解決策があります)。正しい方向へのちょっとした微調整が必​​要なだけです。ありがとう!

4

0 に答える 0