For using the igraph C library
These functions calculate whether an Eulerian path or cycle exists and if so, can find them.
igraph_error_t igraph_is_eulerian(const igraph_t *graph, igraph_bool_t *has_path, igraph_bool_t *has_cycle);
An Eulerian path traverses each edge of the graph precisely once. A closed Eulerian path is referred to as an Eulerian cycle.
Arguments:

The graph object. 

Pointer to a Boolean, will be set to true if an Eulerian path exists. 

Pointer to a Boolean, will be set to true if an Eulerian cycle exists. 
Returns:
Error code:

Time complexity: O(V+E), the number of vertices plus the number of edges.
igraph_error_t igraph_eulerian_cycle( const igraph_t *graph, igraph_vector_int_t *edge_res, igraph_vector_int_t *vertex_res);
Finds an Eulerian cycle, if it exists. An Eulerian cycle is a closed path that traverses each edge precisely once.
This function uses Hierholzer's algorithm.
Arguments:

The graph object. 

Pointer to an initialised vector. The indices of edges
belonging to the cycle will be stored here. May be 

Pointer to an initialised vector. The indices of vertices
belonging to the cycle will be stored here. May be 
Returns:
Error code:

Time complexity: O(V+E), the number of vertices plus the number of edges.
igraph_error_t igraph_eulerian_path( const igraph_t *graph, igraph_vector_int_t *edge_res, igraph_vector_int_t *vertex_res);
Finds an Eulerian path, if it exists. An Eulerian path traverses each edge precisely once.
This function uses Hierholzer's algorithm.
Arguments:

The graph object. 

Pointer to an initialised vector. The indices of edges
belonging to the path will be stored here. May be 

Pointer to an initialised vector. The indices of vertices
belonging to the path will be stored here. May be 
Returns:
Error code:

Time complexity: O(V+E), the number of vertices plus the number of edges.
← Chapter 13. Structural properties of graphs  Chapter 15. Graph visitors → 