|
import Control.Monad (foldM)
|
|
import Data.List ((\\))
|
|
|
|
main :: IO ()
|
|
main = mapM_ print $ queens 8
|
|
|
|
queens :: Int -> [[Int]]
|
|
queens n = foldM f [] [1..n]
|
|
where
|
|
f qs _ = [q:qs | q <- [1..n] \\ qs, q `notDiag` qs]
|
|
q `notDiag` qs = and [abs (q - qi) /= i | (qi,i) <- qs `zip` [1..]]
|