diff options
| author | Shinya Sato <shinnya.sato@gmail.com> | 2022-08-28 20:44:20 +0900 |
|---|---|---|
| committer | Shinya Sato <shinnya.sato@gmail.com> | 2022-08-28 20:44:20 +0900 |
| commit | baa27f2adf0ad741add152bcbca6ffbd312ef066 (patch) | |
| tree | d4a345ec3cf0bcaccf1ac293cd6ad50802bf9224 /comparison/OCaml/nqueen12.ml | |
| parent | e50f2cf8ccab628d0cc90823389355242a23a28a (diff) | |
| parent | b850b9d9e64c12a927bfc2692b4134b23ef79be5 (diff) | |
| download | inpla-baa27f2adf0ad741add152bcbca6ffbd312ef066.tar.gz inpla-baa27f2adf0ad741add152bcbca6ffbd312ef066.zip | |
Merge branch 'develop'
Diffstat (limited to 'comparison/OCaml/nqueen12.ml')
| -rw-r--r-- | comparison/OCaml/nqueen12.ml | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/comparison/OCaml/nqueen12.ml b/comparison/OCaml/nqueen12.ml new file mode 100644 index 0000000..fc56542 --- /dev/null +++ b/comparison/OCaml/nqueen12.ml @@ -0,0 +1,23 @@ +let rec member x alist = + match alist with + [] -> false + | y::ys -> if x=y then true else (member x ys);; + +let rec threat k m alist = + match alist with + [] -> false + | x::xs -> if (k = x-m) || (k = m-x) then true + else (threat (k+1) m xs);; + +let rec queen1 m b n = + match m with + 0 -> [] + | m -> + if (member m b) || (threat 1 m b) then (queen1 (m-1) b n) + else if (List.length b) = (n-1) then [m::b]@(queen1 (m-1) b n) + else (queen1 n (m::b) n) @ (queen1 (m-1) b n);; + +let queen n = queen1 n [] n;; + +let n = 12;; +let () = print_int (List.length (queen n)); |
