packages feed

monadiccp-gecode-0.1: examples/Queens.hs

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}

import Control.CP.FD.GecodeExample

noattack i j qi qj = do
  qi        @/=  qj
  qi  +  i  @/=  qj  +  j
  qi  -  i  @/=  qj  -  j

model :: ExampleModel ModelInt
model n = exists $ \p -> do
  size p @= n
  p `allin` (cte 0,n-1)
  allDiff p
  loopall (cte 0,n-2) $ \i -> 
    loopall (i+1,n-1) $ \j ->
      noattack i j (p!i) (p!j)
  return p

main = example_sat_main_single_expr_gecode model