1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
(*
* This is Wu Hui's example.
*)
structure WuHui =
struct
structure G = DirectedGraph
fun makeDag nodes edges =
let val dag as Graph.GRAPH G = G.graph("Test1",(),10)
in app (#add_node G) nodes;
app (#add_edge G) edges;
dag
end
val dag as Graph.GRAPH G =
makeDag [(1,(0,6)),
(2,(0,6)),
(3,(1,6)),
(4,(1,6)),
(5,(1,6)),
(6,(3,6))
]
[(1,3,1),
(1,4,1),
(2,4,1),
(2,5,1),
(3,6,0),
(4,6,1),
(5,6,1)
]
fun close dag =
TransitiveClosure.acyclic_transitive_closure2
{+ = fn(i,j) => i+j+1,
max = Int.max
} dag
fun leung (dag as Graph.GRAPH G) =
let val dag' as Graph.GRAPH G' = G.graph("Tmp",(),10)
val _ = #forall_nodes G (#add_node G')
val _ = #forall_edges G (#add_edge G')
in LeungPalemPnueli.rank
{dag = dag',
l = fn(_,_,l) => l,
d = fn(_,(_,d)) => d,
r = fn(_,(r,_)) => r,
m = 1
}
end
structure View = GraphViewerFn(daVinci)
structure L = GraphLayout
fun view dag =
View.view(
L.makeLayout{node=fn(n,(r,d))=>
[L.LABEL(Int.toString n^" r="^Int.toString r^
" d="^Int.toString d)
],
edge=fn(i,j,l)=>[L.LABEL(Int.toString l),L.COLOR "red"],
graph=fn _ =>[]} dag
)
end
|