X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=dev%2Fgraph-algorithms.lisp;h=bd52fca08e0df728aa2034bdc8e018989aef806f;hb=44a5cff657760ffb78e34aa688f209283d899236;hp=6230047d46266aad5ba6f19a952dabdc997bbd75;hpb=a196e72eb584440a594f0665ff5c97037ce4cf70;p=cl-graph.git diff --git a/dev/graph-algorithms.lisp b/dev/graph-algorithms.lisp index 6230047..bd52fca 100644 --- a/dev/graph-algorithms.lisp +++ b/dev/graph-algorithms.lisp @@ -1,4 +1,4 @@ -(in-package metabang.graph) +(in-package #:metabang.graph) ;;; --------------------------------------------------------------------------- ;;; @@ -141,15 +141,13 @@ (collect-elements (make-iterator (connected-components graph) :unique t :transform #'parent)))) -;;; --------------------------------------------------------------------------- - (defmethod find-connected-components ((graph basic-graph)) (collect-elements (make-iterator (connected-components graph) :unique t :transform #'parent) :transform (lambda (component) (subgraph-containing graph (element component) - most-positive-fixnum)))) + :depth most-positive-fixnum)))) #+Alternate (defmethod find-connected-components ((graph basic-graph)) @@ -230,46 +228,6 @@ graph) ;;; --------------------------------------------------------------------------- -;;; for completeness -;;; --------------------------------------------------------------------------- - -(defmethod make-graph-from-vertexes ((vertex-list list)) - (bind ((edges-to-keep nil) - (g (copy-template (graph (first vertex-list))))) - - (iterate-elements - vertex-list - (lambda (v) - (add-vertex g (element v)) - (iterate-elements - (edges v) - (lambda (e) - (when (and (member (vertex-1 e) vertex-list) - (member (vertex-2 e) vertex-list)) - (pushnew e edges-to-keep :test #'eq)))))) - - (iterate-elements - edges-to-keep - (lambda (e) - (bind ((v1 (source-vertex e)) - (v2 (target-vertex e))) - ;;?? can we use copy here... - (add-edge-between-vertexes - g (element v1) (element v2) - :edge-type (if (directed-edge-p e) - :directed - :undirected) - :if-duplicate-do :force - :edge-class (type-of e) - :value (value e) - :edge-id (edge-id e) - :element (element e) - :tag (tag e) - :graph g - :color (color e))))) - g)) - -;;; --------------------------------------------------------------------------- (defmethod edge-lessp-by-weight ((e1 basic-edge) (e2 basic-edge)) (< (weight e1) (weight e2))) @@ -304,7 +262,7 @@ ;;; --------------------------------------------------------------------------- -#+ignore ;;; shit +#+ignore ;;; shoot (defmethod minimum-spanning-tree ((vertex-list list) &key (edge-sorter #'edge-lessp-by-weight)) @@ -315,9 +273,7 @@ (iterate-container vertex-list (lambda (v) - (mst-make-set v))) - - + (mst-make-set v))) (loop for edge in (sort v-edges edge-sorter) do (bind ((v1 (source-vertex edge))