File size: 1,033 Bytes
43203b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(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))