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/SML/nqueen-12.sml | |
| parent | e50f2cf8ccab628d0cc90823389355242a23a28a (diff) | |
| parent | b850b9d9e64c12a927bfc2692b4134b23ef79be5 (diff) | |
| download | inpla-baa27f2adf0ad741add152bcbca6ffbd312ef066.tar.gz inpla-baa27f2adf0ad741add152bcbca6ffbd312ef066.zip | |
Merge branch 'develop'
Diffstat (limited to 'comparison/SML/nqueen-12.sml')
| -rw-r--r-- | comparison/SML/nqueen-12.sml | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/comparison/SML/nqueen-12.sml b/comparison/SML/nqueen-12.sml new file mode 100644 index 0000000..9605312 --- /dev/null +++ b/comparison/SML/nqueen-12.sml @@ -0,0 +1,33 @@ +fun member x [] = false +| member x (y::ys) = if x=y then true else (member x ys); + +(* check for (0,q) and (k, qpos[col=k]) where k=1... +http://www.nct9.ne.jp/m_hiroi/func/haskell06.html + 0 1 2 --> + *------------- + 1| . . . . . . + 2| . . . -3. . 5 - 3 = 2 + 3| . . -2. . . 5 - 2 = 3 + 4| . -1. . . . 5 - 1 = 4 + 5| Q . . . . . Q position is 5 + 6| . +1. . . . 5 + 1 = 6 + 7| . . +2. . . 5 + 2 = 7 + 8| . . . +3. . 5 + 2 = 8 + *------------- +*) +fun threat k m [] = false + | threat k m (x::xs) = + if (k = x-m) orelse (k = m-x) then true + else (threat (k+1) m xs); + + +fun queen1 0 b n = [] + | queen1 m b n = + if (member m b) orelse (threat 1 m b) then (queen1 (m-1) b n) + else if (length b) = (n-1) then [m::b]@(queen1 (m-1) b n) + else (queen1 n (m::b) n) @ (queen1 (m-1) b n); + +fun queen n = queen1 n [] n; + +val n = 12; +length (queen n); |
