R/eulerian.R

Defines functions has_eulerian_cycle has_eulerian_path

Documented in has_eulerian_cycle has_eulerian_path

## ----------------------------------------------------------------
##
##   IGraph R package
##   Copyright (C) 2005-2021  The igraph development team
##
##   This program is free software; you can redistribute it and/or modify
##   it under the terms of the GNU General Public License as published by
##   the Free Software Foundation; either version 2 of the License, or
##   (at your option) any later version.
##
##   This program is distributed in the hope that it will be useful,
##   but WITHOUT ANY WARRANTY; without even the implied warranty of
##   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##   GNU General Public License for more details.
##
##   You should have received a copy of the GNU General Public License
##   along with this program; if not, write to the Free Software
##   Foundation, Inc.,  51 Franklin Street, Fifth Floor, Boston, MA
##   02110-1301 USA
##
## -----------------------------------------------------------------

#' Find Eulerian paths or cycles in a graph
#'
#' `has_eulerian_path()` and `has_eulerian_cycle()` checks whether there
#' is an Eulerian path or cycle in the input graph. `eulerian_path()` and
#' `eulerian_cycle()` return such a path or cycle if it exists, and throws
#' an error otherwise.
#'
#' `has_eulerian_path()` decides whether the input graph has an Eulerian
#' *path*, i.e. a path that passes through every edge of the graph exactly
#' once, and returns a logical value as a result. `eulerian_path()` returns
#' a possible Eulerian path, described with its edge and vertex sequence, or
#' throws an error if no such path exists.
#'
#' `has_eulerian_cycle()` decides whether the input graph has an Eulerian
#' *cycle*, i.e. a path that passes through every edge of the graph exactly
#' once and that returns to its starting point, and returns a logical value as
#' a result. `eulerian_cycle()` returns a possible Eulerian cycle, described
#' with its edge and vertex sequence, or throws an error if no such cycle exists.
#'
#' @param graph An igraph graph object
#' @return For `has_eulerian_path()` and `has_eulerian_cycle()`, a logical
#'   value that indicates whether the graph contains an Eulerian path or cycle.
#'   For `eulerian_path()` and `eulerian_cycle()`, a named list with two
#'   entries: \item{epath}{A vector containing the edge ids along the Eulerian
#'   path or cycle.} \item{vpath}{A vector containing the vertex ids along the
#'   Eulerian path or cycle.}
#'
#' @keywords graphs
#' @examples
#'
#' g <- make_graph(~ A - B - C - D - E - A - F - D - B - F - E)
#'
#' has_eulerian_path(g)
#' eulerian_path(g)
#'
#' has_eulerian_cycle(g)
#' try(eulerian_cycle(g))
#'
#' @family cycles
#' @export
has_eulerian_path <- function(graph) {
  is_eulerian_impl(graph)$has_path
}

#' @rdname has_eulerian_path
#' @family cycles
#' @export
has_eulerian_cycle <- function(graph) {
  is_eulerian_impl(graph)$has_cycle
}

#' @rdname has_eulerian_path
#' @family cycles
#' @export
eulerian_path <- eulerian_path_impl

#' @rdname has_eulerian_path
#' @family cycles
#' @export
eulerian_cycle <- eulerian_cycle_impl

Try the igraph package in your browser

Any scripts or data that you put into this service are public.

igraph documentation built on Aug. 10, 2023, 9:08 a.m.