diff --git a/graph.rkt b/graph.rkt index 9c96332..4385510 100644 --- a/graph.rkt +++ b/graph.rkt @@ -39,7 +39,7 @@ min-st-kruskal max-st-kruskal min-st-prim max-st-prim - bellman-ford + bellman-ford dijkstra graphviz) @@ -199,6 +199,8 @@ ;; 6 Single-source Shortest Paths (define (bellman-ford g source) (g:bellman-ford (gg g) source)) + (define (dijkstra g source) + (g:dijkstra (gg g) source)) ;; 10 Graphviz (define (graphviz g #:output [output #f] #:colors [colors #f]) @@ -294,6 +296,8 @@ ;; Single-source Shortest Paths [bellman-ford (-> Graph Any (Values (Mutable-HashTable Any Number) (Mutable-HashTable Any Any)))] + [dijkstra (-> Graph Any (Values (Mutable-HashTable Any Number) + (Mutable-HashTable Any Any)))] ;; 10 Graphviz [graphviz (->* (Graph) @@ -425,6 +429,12 @@ (check-equal? (hash->ordered-list bf-dists) '((a . 0) (b . 1) (c . 2) (d . 4))) (check-equal? (hash->ordered-list bf-pred) + '((a . #f) (b . a) (c . a) (d . b))) + + (define-values (dj-dists dj-pred) (dijkstra g0 'a)) + (check-equal? (hash->ordered-list dj-dists) + '((a . 0) (b . 1) (c . 2) (d . 4))) + (check-equal? (hash->ordered-list dj-pred) '((a . #f) (b . a) (c . a) (d . b)))) (test-case "10 Graphviz"