110,536
社区成员
发帖
与我相关
我的任务
分享
let NQueens n =
let a = [|for i in 0..n -> true|]
let b = [|for i in 0..(2 * n - 1) -> true|]
let c = [|for i in 0..(2 * n - 1) -> true|]
let path = [|for i in 0..n -> 0|]
let rec Solve n j =
if j > n then
printfn "%A" path.[1..]
else
for i in 1..n do
if (a.[i] && b.[i + j - 1] && c.[n - i + j]) then
a.[i] <- false
b.[i + j - 1] <- false
c.[n - i + j] <- false
path.[j] <- i
do Solve n (j + 1)
a.[i] <- true
b.[i + j - 1] <- true
c.[n - i + j] <- true
do Solve n 1
printfn ""
List.iter NQueens [1..10]
System.Console.ReadKey()|>ignore
let rec qsort = function
| [] -> []
| (x:int)::xs ->
let left = List.choose (fun elem -> if elem<=x then Some(elem) else None) xs
let right = List.choose (fun elem -> if elem>x then Some(elem) else None) xs
qsort left @ [x] @ qsort right
let result = qsort [1;8;3;4;7;6;2;9;5;1;5;6;7;8;3;4;5;6;3]
printfn "%A" result