# Erlang Thursday – digraph:get_cycle/2

Today’s Erlang Thursday is on digraph:get_cycle/2.

We will continue working with the graph from the previous post on digraph:get_path/3. ```Graph = digraph:new().
% {digraph,20498,24595,28692,true}
% ['\$v'|0]
% ['\$v'|1]
% ['\$v'|2]
% ['\$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]
```

`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, V1).
% [['\$v'|0],['\$v'|1],['\$v'|3],['\$v'|0]]
digraph:get_cycle(Graph, V2).
% [['\$v'|1],['\$v'|3],['\$v'|0],['\$v'|1]]
```

Next, we add a new vertex `V5`, and a new edge originating from `V4` and ending on `V5`

We then call `digraph:get_cycle/2` on V5, and we get back a `false` as no cyle exists in the graph with vertex `V5` in it.

```V5 = digraph:add_vertex(Graph).
% ['\$v'|4]
E6 = digraph:add_edge(Graph, V4, V5).
% ['\$e'|5]
digraph:get_cycle(Graph, V5).
% 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, V1).
% [['\$v'|0],['\$v'|1],['\$v'|3],['\$v'|0]]
digraph:get_short_cycle(Graph, V5).
% false
```

–Proctor