Add matrix->matrix-graph and matrix->graph->graph.

This commit is contained in:
Sergiu Ivanov 2022-01-01 17:52:20 +01:00
parent ecfefeb03e
commit e5b75ad8bb

View file

@ -32,6 +32,7 @@
weighted-graph? weighted-graph/undirected weighted-graph/directed
undirected-graph directed-graph
(rename-out [g:matrix-graph? matrix-graph?])
matrix->matrix-graph matrix-graph->graph
bfs bfs/generalized fewest-vertices-path
dfs dfs/generalized
@ -120,6 +121,9 @@
(graph (g:directed-graph es ws)))
;; 2.3 Matrix Graphs
(define (matrix->matrix-graph mtx)
(g:matrix->matrix-graph mtx))
(define matrix-graph->graph graph)
;; 4 Basic Graph Functions
;; 4.1 Breadth-first Search
@ -240,6 +244,7 @@
(define (graphviz g #:output [output #f] #:colors [colors #f])
(g:graphviz (gg g) #:output output #:colors colors)))
(require (only-in math/matrix Matrix))
(require/typed/provide 'graph-wrapper
[#:opaque Graph graph?]
@ -282,6 +287,8 @@
[directed-graph (->* ((Listof (List Any Any))) ((Listof Any)) Graph)]
;; 2.3 Matrix Graphs
[matrix->matrix-graph (-> (Matrix Any) Matrix-Graph)]
[matrix-graph->graph (-> Matrix-Graph Graph)]
;; 4 Basic Graph Functions
;; 4.1 Breadth-first Search
@ -370,6 +377,7 @@
;; functions can be invoked without errors. The tests do not check
;; whether the results make sense.
(require typed/rackunit)
(require (only-in math/matrix matrix))
;; TODO: Submit an update to hash->list in Racket and then remove
;; this function.
@ -431,7 +439,10 @@
"digraph G {\n\tnode0 [label=\"c\"];\n\tnode1 [label=\"a\"];\n\tnode2 [label=\"b\"];\n\tsubgraph U {\n\t\tedge [dir=none];\n\t}\n\tsubgraph D {\n\t\tnode1 -> node2 [label=\"1\"];\n\t\tnode2 -> node0 [label=\"hello\"];\n\t}\n}\n")
;; 2.3 Matrix Graphs
(check-false (matrix-graph? (directed-graph '((a b) (b c))))))
(check-false (matrix-graph? (directed-graph '((a b) (b c)))))
(define mg (matrix->matrix-graph (matrix [[1 2] [3 #f]])))
(check-true (matrix-graph? mg))
(check-true (has-vertex? (matrix-graph->graph mg) 1)))
(test-case "4 Basic Graph Functions"
;; 4.1 Breadth-first Search