4
A
回答
5
典型的方式是讓非可變狀態傳下來的調用堆棧,用輔助功能以目前的狀態,返回一個新的狀態爲「假」的突變。
一種可能的(雖然相當不理想的)數獨解算器將隨後是:
;;; Use a list of 81 integers to represent a sudoku board,
;;; each number 1-9 represents itself, 0 represents a blank
(defun sudoku-solver (board)
(cond ((notany #'zerop board)
(if (sudoku-solved-p board)
board
nil))
(t (let ((positions (sudoku-all-blanks board)))
(loop for position in positions
do (loop for number in '(1 2 3 4 5 6 7 8 9)
do (let ((result (sudoku-solver
(sudoku-set board
position
number))))
(when result
(return-from sudoku-solver result)))))))))
這將自動回溯,直到找到一個解。我已經跳過模糊的演示與支持代碼,將演示變成實際工作代碼。
+0
謝謝,在一定程度上幫助我。:) – Josh
相關問題
- 1. Sudoku Backtracking
- 2. Python backtracking
- 3. Backtracking typeerror python
- 4. optparse-applicative Backtracking
- 5. Sudoku algorithm with backtracking - java
- 6. 使用backtracking解決TSP問題
- 7. python del函數中的「backtracking」變量
- 8. 卡在N皇后java算法。 (Backtracking)
- 9. Common Lisp a Lisp-n?
- 10. Lisp接受值(Lisp新手)
- 11. J2ME lisp?
- 12. lisp樹遍歷
- 13. Lisp list-contains program
- 14. LISP通過
- 15. Lisp返回值
- 16. 寫VS在LISP
- 17. Common Lisp中
- 18. Emacs lisp highlighting
- 19. Common Lisp流?
- 20. LISP&rest issue
- 21. Lisp指針?
- 22. 不能用Lisp
- 23. lisp的美化?
- 24. Lisp和Android NDK
- 25. Emacs lisp char-table
- 26. Step Eval Common Lisp
- 27. 「unfold」for common lisp?
- 28. 共LISP - 減法
- 29. lisp src webserver.lisp
- 30. Predicates Common Lisp
_你想回溯什麼? – Svante