(in-package #:cl-graph) ;;; make a simple graph (let ((g (make-container 'graph-container))) (loop for v in '(a b c d e) do (add-vertex g v)) (loop for (v1 . v2) in '((a . b) (a . c) (b . d) (c . e)) do (add-edge-between-vertexes g v1 v2)) g) ;;; make a directed graph ;; adding the vertexes up front not really necessary (let ((g (make-container 'graph-container :default-edge-type :directed))) (loop for (v1 . v2) in '((a . b) (a . c) (b . d) (c . e)) do (add-edge-between-vertexes g v1 v2)) g) ;;; make a graph, find some things (let ((g (make-container 'graph-container))) (loop for (src dst) in '((a b) (a c) (c d) (a d) (d e) (e f) (b f)) do (add-edge-between-vertexes g src dst)) (print (find-vertex g 'a)) (print (find-vertex g 'q nil)) (print (find-edge-between-vertexes g 'a 'b)) (print (find-edge-between-vertexes g 'a 'f :error-if-not-found? nil)) (format t "~%Neighbors of vertex A:") (iterate-neighbors (find-vertex g 'a) #'print))