Tarjan: Difference between revisions
Content added Content deleted
Line 539: | Line 539: | ||
sccs) |
sccs) |
||
(define (make-graph |
(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 ([ |
(for/hasheq ([vs (in-list xs)]) (values (make-node (first vs)) (map make-node (rest vs))))) |
||
(tarjan (make-graph |
(tarjan (make-graph '([0 1] |
||
[2 0] |
|||
[5 2 6] |
|||
[6 5] |
|||
[1 2] |
|||
[3 1 2 4] |
|||
[4 5 3] |
|||
[7 4 7 6])))</lang> |
|||
{{out}} |
{{out}} |