Plaster
New
List
Login
common-lisp
default
anonymous
2022.11.17 14:59:21
(defmethod breadth-first-search ((graph undirected-graph) function vertex) (let ((pending (adjacency-row graph vertex)) (visited '())) (flet ((seen (x) "X has been visited already." (find x visited))) (loop while pending do (mapcar function pending) (setf visited (remove-duplicates (append pending visited)) pending (loop for old in (rest pending) for (vertex . neighbors) in (neighbors graph old) unless (seen vertex) do collecting vertex into next appending neighbors into after-next ; WHY is this not intended? finally (return (remove-if #'seen (append next after-next)))))))))
Raw
Annotate
Repaste
Edit