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