(defun new-nodes (path) (remove-if #'(lambda (n) (member n path)) (node-neighbors (first path)))) (defun new-paths (new-nodes path) (mapcar #'(lambda (n) (cons n path)) new-nodes)) ;;; (defmethod find-all-paths ((self graph) start &optional (path-queue (list (list start)))) (if (null path-queue) nil (let* ((path (first path-queue)) (new-nodes (new-nodes path))) (if (null new-nodes) (cons (reverse path) (find-all-paths self start (rest path-queue))) (find-all-paths self start (append (new-paths new-nodes path) (rest path-queue))))) ))実行結果は以下のようになります.
<cl> (find-all-paths *graph* (find-node *graph* "s")) ((#<NODE @ #x203c1a92> #<NODE @ #x203c1ac2> #<NODE @ #x203c1af2> #<NODE @ #x203c1b22>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1ac2> #<NODE @ #x203c1af2> #<NODE @ #x203c1b82> #<NODE @ #x203c1b52>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1ac2> #<NODE @ #x203c1af2> #<NODE @ #x203c1b82> #<NODE @ #x203c1bb2>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1ac2> #<NODE @ #x203c1b52> #<NODE @ #x203c1b82> #<NODE @ #x203c1af2> #<NODE @ #x203c1b22>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1ac2> #<NODE @ #x203c1b52> #<NODE @ #x203c1b82> #<NODE @ #x203c1bb2>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1b52> #<NODE @ #x203c1ac2> #<NODE @ #x203c1af2> #<NODE @ #x203c1b22>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1b52> #<NODE @ #x203c1ac2> #<NODE @ #x203c1af2> #<NODE @ #x203c1b82> #<NODE @ #x203c1bb2>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1b52> #<NODE @ #x203c1b82> #<NODE @ #x203c1af2> #<NODE @ #x203c1ac2>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1b52> #<NODE @ #x203c1b82> #<NODE @ #x203c1af2> #<NODE @ #x203c1b22>) (#<NODE @ #x203c1a92> #<NODE @ #x203c1b52> #<NODE @ #x203c1b82> #<NODE @ #x203c1bb2>))