LFE Friday - digraph:get_cycle/2
This week's LFE Friday was translated with permission from the Erlang Thursday series by Steven Proctor. This week's translator: Robert Virding.
Today's LFE Friday is on digraph:get_cycle/2.
We will continue working with the graph from the previous post on digraph:get_path/3.
> (set graph (digraph:new))
#(digraph 8207 12304 16401 true)
> (set v-1 (digraph:add_vertex graph 'v-1))
v-1
> (set v-2 (digraph:add_vertex graph 'v-2))
v-2
> (set v-3 (digraph:add_vertex graph 'v-3))
v-3
> (set v-4 (digraph:add_vertex graph 'v-4))
v-4
> (set e-1 (digraph:add_edge graph v-1 v-2))
($e . 0)
> (set e-2 (digraph:add_edge graph v-2 v-3))
($e . 1)
> (set e-3 (digraph:add_edge graph v-3 v-4))
($e . 2)
> (set e-4 (digraph:add_edge graph v-2 v-4))
($e . 3)
> (set e-5 (digraph:add_edge graph v-4 v-1))
($e . 4)
digraph:get_cycle/2
takes a graph G
, and an vertex V
, and tries to find a path that creates a cycle between the vertex V
in graph G
.
> (digraph:get_cycle graph v-1)
(v-1 v-2 v-4 v-1)
> (digraph:get_cycle graph v-2)
(v-2 v-4 v-1 v-2)
Next, we add a new vertex v-5
, and a new edge originating from v-4
and ending on v-5
We then call digraph:get_cycle/2
on v-5
, and we get back a false
as no cycle exists in the graph with vertex v-5
in it.
> (set v-5 (digraph:add_vertex graph 'v-5))
v-5
> (digraph:add_edge graph v-4 v-5)
($e . 5)
> (digraph:get_cycle graph v-5)
false
The digraph
module also contains the function digraph:get_short_cycle/2.
digraph:get_short_cycle/2
attempts to find the shortest cycle in the graph G
for vertex V
.
The documentation for digraph:get_short_cycle/2
exact phrasing is:
Tries to find an as short as possible simple cycle through the vertex V of the digraph G.
So depending on how you read that, the shortest cycle might not be guaranteed to be returned, but simply a shorter cycle, which may depend on the overall size and complexity of the graph.
> (digraph:get_short_cycle graph v-1)
(v-1 v-2 v-4 v-1)
> (digraph:get_short_cycle graph v-5)
false
- Proctor, Robert