diff --git a/distances.lisp b/distances.lisp index 9df73ee..60a5e25 100644 --- a/distances.lisp +++ b/distances.lisp @@ -36,15 +36,14 @@ (declare (optimize (debug 3))) (let* ((frontier (list (root-cell d))) (new-frontier ())) - (loop while frontier + (loop while (not (null frontier)) do (dolist (cell frontier) (setf new-frontier ()) (dolist (linked (links cell)) - (when (gethash linked (distance-cells d)) + (when (not (gethash linked (distance-cells d))) (set-distance d :cell linked :distance (+ 1 (gethash cell (distance-cells d)))) - (setf new-frontier (append `(,linked) new-frontier)))) - - (setf frontier (copy-tree new-frontier))))) + (setf new-frontier (append `(,linked) new-frontier))))) + (setf frontier (copy-tree new-frontier)))) (distance-cells d)) (defun make-distance (root grid) diff --git a/statements.lisp b/statements.lisp new file mode 100644 index 0000000..6d1ee4b --- /dev/null +++ b/statements.lisp @@ -0,0 +1,17 @@ +(in-package #:mazes) + +; (ql:quickload :mazes) +(defvar g (make-grid 5 5)) + +(defvar sw (make-sidewinder g)) + +(defvar c00 (get-cell g 0 0)) + +(defvar d (make-distance c00 g)) + +(defvar dcells (distance-cells d)) + +(defvar dc (calculate-distance d)) + +(defun hash-keys (hash-table) + (loop for key being the hash-keys of hash-table collect key))