Tarjan: Difference between revisions

Content added Content deleted
Line 539: Line 539:
sccs)
sccs)


(define (make-graph h)
(define (make-graph xs)
(define store (make-hash))
(define store (make-hash))
(define (make-node v) (hash-ref! store v (thunk (node v #f #f #f))))
(define (make-node v) (hash-ref! store v (thunk (node v #f #f #f))))
Line 546: Line 546:
;; reference instead of actual value. Had we use the actual value,
;; reference instead of actual value. Had we use the actual value,
;; the key would be a mutable value, which causes undefined behavior
;; the key would be a mutable value, which causes undefined behavior
(for/hasheq ([(u vs) (in-hash h)]) (values (make-node u) (map make-node vs))))
(for/hasheq ([vs (in-list xs)]) (values (make-node (first vs)) (map make-node (rest vs)))))


(tarjan (make-graph #hash([0 . (1)]
(tarjan (make-graph '([0 1]
[2 . (0)]
[2 0]
[5 . (2 6)]
[5 2 6]
[6 . (5)]
[6 5]
[1 . (2)]
[1 2]
[3 . (1 2 4)]
[3 1 2 4]
[4 . (5 3)]
[4 5 3]
[7 . (4 7 6)])))</lang>
[7 4 7 6])))</lang>


{{out}}
{{out}}