이충민
가입: 2008년 9월 20일 올린 글: 76
|
올려짐: 2008년10월9일 11:10 주제: 참고: n-queens의 DFS 구현 |
|
|
코드: | ; dfs impl
(define (queens-dfs n)
(define (safe? p)
(define (safe-local? x y n)
(not (or (= x y)
(= (- x n) y)
(= (+ x n) y))))
(define (iter list n)
(if (null? list)
#t
(and (safe-local? (car p) (car list) n)
(iter (cdr list) (+ n 1)))))
(iter (cdr p) 1))
(define (helper p col)
(cond ((and (= (length p) n)
(safe? p))
p)
((= col n) (helper (cdr p) (+ (car p) 1)))
((safe? (cons col p)) (helper (cons col p) 0))
(else (helper p (+ col 1)))))
(helper '() 0))
(define (print-queens-dfs n)
(define p (queens-dfs n))
(define (print-bar n)
(cond ((> n 0) (display '-)
(print-bar (- n 1)))))
(define (print-row n)
(print-bar n)
(display 'Q)
(print-bar (- (length p) n 1)))
(for-each (lambda (x) (print-row x) (newline))
p)) |
|
|