Browse Source

Add bellman-ford.

master
Sergiu Ivanov 10 months ago
parent
commit
124c9f51b5
  1. 19
      graph.rkt

19
graph.rkt

@ -39,6 +39,8 @@
min-st-kruskal max-st-kruskal min-st-prim max-st-prim
bellman-ford
graphviz)
;; Wrap the opaque graph structure coming from the generic
@ -194,6 +196,10 @@
(define (max-st-prim g source)
(g:max-st-prim (gg g) source))
;; 6 Single-source Shortest Paths
(define (bellman-ford g source)
(g:bellman-ford (gg g) source))
;; 10 Graphviz
(define (graphviz g #:output [output #f] #:colors [colors #f])
(g:graphviz (gg g) #:output output #:colors colors)))
@ -285,6 +291,10 @@
[min-st-prim (-> Graph Any (Listof (List Any Any)))]
[max-st-prim (-> Graph Any (Listof (List Any Any)))]
;; Single-source Shortest Paths
[bellman-ford (-> Graph Any (Values (Mutable-HashTable Any Number)
(Mutable-HashTable Any Any)))]
;; 10 Graphviz
[graphviz (->* (Graph)
(#:output Output-Port
@ -408,6 +418,15 @@
(check-equal? (max-st-prim g0 'e)
'((a c) (e a) (c d) (c b))))
(test-case "6 Single-source Shortest Paths"
(define g0 (weighted-graph/directed '((1 a b) (2 a c) (3 b d) (3 c d))))
(define-values (bf-dists bf-pred) (bellman-ford g0 'a))
(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))))
(test-case "10 Graphviz"
(define g (directed-graph '((a b) (b c))))
(check-equal? (graphviz g)

Loading…
Cancel
Save