defmodule Graphic do @dg :digraph # graph ops def bridge(g, a, b) do if !(g|>@dg.vertex(a)), do: g|>@dg.add_vertex(a) if !(g|>@dg.vertex(b)), do: g|>@dg.add_vertex(b) g|>@dg.add_edge(a, b) end def bridge(g, a, b, label) do if !(g|>@dg.vertex(a)), do: g|>@dg.add_vertex(a) if !(g|>@dg.vertex(b)), do: g|>@dg.add_vertex(b) g|>@dg.add_edge(a, b, label) end # graph reads def edges(g), do: g|>@dg.edges()|>Enum.map(& g|>@dg.edge(&1)) def order(g), do: g|>:digraph_utils.topsort() # node reads def neighbors(g,n), do: g|>@dg.out_neighbours(n) end