我正在使用Lisp中的回溯来处理N-queens问题。到目前为止,我的代码打印了n> = 4的所有可能解决方案。但是,我希望只打印任何n值的第一个解决方案。
(defun backtracksearch (row n)
// (if () *I probably need a line here to stop once the first solution is found*
(if (< row n)
(loop for j below n
do (when (is-safe row j n)
(setf (aref *chessboard* row j) 'board)
(backtracksearch (+ 1 row) n)
(setf (aref *chessboard* row j) 'nil)))
(print-solution n)))
我尝试使用与回溯n-queens的C ++解决方案相同的实现/逻辑。 关于可能的前进方向的任何建议都会有所帮助。
答案 0 :(得分:3)
格式错误,缩进如下:
(defun backtracksearch (row n)
(if (< row n)
(loop for j below n
do (when (is-safe row j n)
(setf (aref *chessboard* row j) 'board)
(backtracksearch (+ 1 row) n)
(setf (aref *chessboard* row j) 'nil)))
(print-solution n)))
//
是c++中的评论,请改用;
(dotimes (j n) (when ...))
就足够了。j
满足is-safe
时会发生什么?backstracksearch
的返回值是什么?backtracksearch
的递归调用是否找到了解决方案?