# # Then call "dot -Tpng -o graph.png"
# ~~~
#
-# ![A graph drawing produced by Graphviz](https://github.com/privat/nit/blob/master/lib/graph.png)
+# ![A graph drawing produced by Graphviz](https://github.com/nitlang/nit/blob/master/lib/graph.png)
#
# Other methods
# =============
# g.add_arcs([[1,2],[2,1],[2,3],[3,4],[4,5],[5,3]])
# for component in g.strongly_connected_components.to_partitions
# do
-# print component
+# print component
# end
# # Prints [1,2] and [3,4,5]
# ~~~
# g.add_arc(0, 2)
# g.add_arc(1, 2)
# for arc in g.arcs_iterator do
- # assert g.has_arc(arc[0], arc[1])
+ # assert g.has_arc(arc[0], arc[1])
# end
# ~~~
fun arcs_iterator: Iterator[Array[V]] do return new ArcsIterator[V](self)
# g.add_arc(1, 3)
# g.add_arc(2, 3)
# for arc in g.incoming_arcs(3) do
- # assert g.is_predecessor(arc[0], arc[1])
+ # assert g.is_predecessor(arc[0], arc[1])
# end
# ~~~
fun incoming_arcs(u: V): Collection[Array[V]]
# g.add_arc(2, 3)
# g.add_arc(1, 2)
# for arc in g.outgoing_arcs(1) do
- # assert g.is_successor(arc[1], arc[0])
+ # assert g.is_successor(arc[1], arc[0])
# end
# ~~~
fun outgoing_arcs(u: V): Collection[Array[V]]
fun to_dot: String
do
var s = "digraph \{\n"
+ var id_set = new HashMap[V, Int]
# Writing the vertices
- for u in vertices_iterator do
- s += " \"{u.to_s.escape_to_dot}\" "
+ for u in vertices_iterator, i in [0 .. vertices.length[ do
+ id_set[u] = i
+ s += " \"{i}\" "
s += "[label=\"{u.to_s.escape_to_dot}\"];\n"
end
# Writing the arcs
for arc in arcs do
- s += " {arc[0].to_s.escape_to_dot} "
- s += "-> {arc[1].to_s.escape_to_dot};"
+ s += " {id_set[arc[0]]} "
+ s += "-> {id_set[arc[1]]};"
end
s += "\}"
return s
end
+ # Open Graphviz with `self.to_dot`.
+ #
+ # Mainly used for debugging.
+ fun show_dot do
+ var f = new ProcessWriter("dot", "-Txlib")
+ f.write to_dot
+ f.close
+ end
+
## ------------ ##
## Neighborhood ##
## ------------ ##