Today’s Erlang Thursday is on digraph:in_neighbors/2.
digraph:in_neighbors/2
takes a graph G
, and a vertex V
, and will return a list of all the vertices that have edges originating from them that are directed toward the vertex V
.
We will continue working with the graph from last week’s post on digraph:get_path/3.
Graph = digraph:new(). % {digraph,20498,24595,28692,true} V1 = digraph:add_vertex(Graph). % ['$v'|0] V2 = digraph:add_vertex(Graph). % ['$v'|1] V3 = digraph:add_vertex(Graph). % ['$v'|2] V4 = digraph:add_vertex(Graph). % ['$v'|3] E1 = digraph:add_edge(Graph, V1, V2). % ['$e'|0] E2 = digraph:add_edge(Graph, V2, V3). % ['$e'|1] E3 = digraph:add_edge(Graph, V3, V4). % ['$e'|2] E4 = digraph:add_edge(Graph, V2, V4). % ['$e'|3] E5 = digraph:add_edge(Graph, V4, V1). % ['$e'|4]
With that graph setup again, we can now find the in_neighbors
of different vertices in our graph.
digraph:in_neighbours(Graph, V4). % [['$v'|1],['$v'|2]] digraph:in_neighbours(Graph, V1). % [['$v'|3]] digraph:in_neighbours(Graph, V2). % [['$v'|0]]
So for vertex V4
we see the return value of [['$v'|1],['$v'|2]]
, which are the vertices V2
and V3
. For V1
we have an inbound neighbor of V4
, and for V2
we have the inbound neighbor of V1
.
digraph:out_neighbors/2
The digraph
module also contains the function digraph:out_neighbors/2, which returns a list of the vertices that a the given vertex “points to” with its edges in the directed graph.
digraph:out_neighbours(Graph, V2). % [['$v'|3],['$v'|2]] digraph:out_neighbours(Graph, V4). % [['$v'|0]] digraph:out_neighbours(Graph, V1). % [['$v'|1]]
We can see from the picture of our graph that V2
has edges that “point to” the vertices V3
and V4
, and if we look at the result of digraph:out_neighbors/2
, we get the result of the vertices V3
and V4
.
In this case we get the list of vertices where V4
is first and V3
is second, but that may not be the case, as the documentation states that the the edges are “in some unspecified order”, which holds true of digraph:in_neighbors/2
as well.
–Proctor