回溯法(scheme) -- N皇后问题
2014-08-30 19:40
281 查看
; ========================================================== > (Queens 8) ; 输出所有有效布局 1: #(0 4 7 5 2 6 1 3) 2: #(0 5 7 2 6 3 1 4) .... 91: #(7 2 0 5 1 4 6 3) 92: #(7 3 0 2 5 1 6 4) total = 92 ; N-Queen layout ; ============================================================= (define (Queens n) (let ((count 0) (layout (make-vector n))) (define (valid? col row) (let p ((i 0) (res #t)) (if (and res (< i col)) (let ((diff (abs (- row (vector-ref layout i))))) (p (+ i 1) (and res (not (or (= diff 0) (= diff (- col i))))))) res))) (let t ((col 0) (row 0)) (if (= n col) (begin (set! count (+ count 1)) (printf "~a:\t~a\n" count layout))) (cond ((or (= n col) (= n row)) (if (> col 0) (t (- col 1) (+ 1 (vector-ref layout (- col 1)))))) (else (if (valid? col row) (begin (vector-set! layout col row) (t (+ col 1) 0)) (t col (+ row 1)))))) (printf "total = ~a\n" count)))
相关文章推荐
- 回溯法之N皇后问题
- 回溯法求解 “n 皇后 问题”——Java 实现
- 【回溯法】n皇后问题
- 回溯法经典—n-皇后问题
- 回溯法解决N皇后问题
- 经典算法(1)——8皇后问题求解(回溯法)
- 第5章 回溯法,n皇后问题
- N皇后问题的回溯法实现
- 八皇后问题——回溯法解决
- 回溯法求解n皇后问题
- 回溯法解决N皇后问题
- HDU2553 N皇后问题(回溯法)
- 经典算法(1)——8皇后问题求解(回溯法)
- 回溯法解决N皇后问题——递归与非递归求解
- sicp练习2.42 [解8皇后问题的Scheme语言实现]
- 经典 八皇后问题——回溯法
- 从N-皇后问题看回溯法
- 使用回溯法来解决n皇后问题
- 回溯法算法步骤&n皇后问题的详细程序(C++)
- 回溯法 解 n皇后问题