core :: union_find
union–find algorithm using an efficient disjoint-set data structure
# Example from http://www.graphviz.org/content/cluster
module clusters is example
import dot
var graph = new DotGraph("G", "digraph")
var cl0 = new DotGraph("cluster_0", "subgraph")
cl0["label"] = "process #1"
cl0["style"] = "filled"
cl0["color"] = "lightgrey"
cl0.nodes_attrs["style"] = "filled"
cl0.nodes_attrs["color"] = "white"
var a0 = cl0.add_node("a0")
var a1 = cl0.add_node("a1")
var a2 = cl0.add_node("a2")
var a3 = cl0.add_node("a3")
cl0.add_edge(a0, a1)
cl0.add_edge(a1, a2)
cl0.add_edge(a2, a3)
graph.add cl0
var cl1 = new DotGraph("cluster_1", "subgraph")
cl1["label"] = "process #2"
cl1["color"] = "blue"
cl1.nodes_attrs["style"] = "filled"
var b0 = cl1.add_node("b0")
var b1 = cl1.add_node("b1")
var b2 = cl1.add_node("b2")
var b3 = cl1.add_node("b3")
cl1.add_edge(b0, b1)
cl1.add_edge(b1, b2)
cl1.add_edge(b2, b3)
graph.add cl1
var start = graph.add_node("start")
start["shape"] = "Mdiamond"
var nend = graph.add_node("end")
nend["shape"] = "Msquare"
graph.add_edge(start, a0)
graph.add_edge(start, b0)
graph.add_edge(a1, b3)
graph.add_edge(b2, a3)
graph.add_edge(a3, a0)
graph.add_edge(a3, nend)
graph.add_edge(b3, nend)
if args.is_empty then
print graph.to_dot
# graph.show
else
graph.to_dot.write_to_file args.first
end
lib/dot/examples/clusters.nit:15,1--73,3