This function lists all simple cycles in a graph within a range of cycle lengths. A cycle is called simple if it has no repeated vertices.
Multi-edges and self-loops are taken into account. Note that typical graphs have exponentially many cycles and the presence of multi-edges exacerbates this combinatorial explosion.
simple_cycles(
graph,
mode = c("out", "in", "all", "total"),
min = NULL,
max = NULL
)The input graph.
Character constant specifying how to handle directed graphs.
out follows edge directions, in follows edges in the reverse direction,
and all ignores edge directions. Ignored in undirected graphs.
Lower limit on cycle lengths to consider. NULL means no limit.
Upper limit on cycle lengths to consider. NULL means no limit.
A named list, with two entries:
The list of cycles in terms of their vertices.
The list of cycles in terms of their edges.
Graph cycles
feedback_arc_set(),
feedback_vertex_set(),
find_cycle(),
girth(),
has_eulerian_path(),
is_acyclic(),
is_dag()
g <- graph_from_literal(A -+ B -+ C -+ A -+ D -+ E +- F -+ A, E -+ E, A -+ F, simplify = FALSE)
simple_cycles(g)
#> $vertices
#> $vertices[[1]]
#> + 3/6 vertices, named, from c4da9ad:
#> [1] A B C
#>
#> $vertices[[2]]
#> + 2/6 vertices, named, from c4da9ad:
#> [1] A F
#>
#> $vertices[[3]]
#> + 1/6 vertex, named, from c4da9ad:
#> [1] E
#>
#>
#> $edges
#> $edges[[1]]
#> + 3/9 edges from c4da9ad (vertex names):
#> [1] A->B B->C C->A
#>
#> $edges[[2]]
#> + 2/9 edges from c4da9ad (vertex names):
#> [1] A->F F->A
#>
#> $edges[[3]]
#> + 1/9 edge from c4da9ad (vertex names):
#> [1] E->E
#>
#>
simple_cycles(g, mode = "all") # ignore edge directions
#> $vertices
#> $vertices[[1]]
#> + 3/6 vertices, named, from c4da9ad:
#> [1] A B C
#>
#> $vertices[[2]]
#> + 4/6 vertices, named, from c4da9ad:
#> [1] A D E F
#>
#> $vertices[[3]]
#> + 4/6 vertices, named, from c4da9ad:
#> [1] A D E F
#>
#> $vertices[[4]]
#> + 2/6 vertices, named, from c4da9ad:
#> [1] A F
#>
#> $vertices[[5]]
#> + 1/6 vertex, named, from c4da9ad:
#> [1] E
#>
#>
#> $edges
#> $edges[[1]]
#> + 3/9 edges from c4da9ad (vertex names):
#> [1] A->B B->C C->A
#>
#> $edges[[2]]
#> + 4/9 edges from c4da9ad (vertex names):
#> [1] A->D D->E F->E F->A
#>
#> $edges[[3]]
#> + 4/9 edges from c4da9ad (vertex names):
#> [1] A->D D->E F->E A->F
#>
#> $edges[[4]]
#> + 2/9 edges from c4da9ad (vertex names):
#> [1] F->A A->F
#>
#> $edges[[5]]
#> + 1/9 edge from c4da9ad (vertex names):
#> [1] E->E
#>
#>
simple_cycles(g, mode = "all", min = 2, max = 3) # limit cycle lengths
#> $vertices
#> $vertices[[1]]
#> + 3/6 vertices, named, from c4da9ad:
#> [1] A B C
#>
#> $vertices[[2]]
#> + 2/6 vertices, named, from c4da9ad:
#> [1] A F
#>
#>
#> $edges
#> $edges[[1]]
#> + 3/9 edges from c4da9ad (vertex names):
#> [1] A->B B->C C->A
#>
#> $edges[[2]]
#> + 2/9 edges from c4da9ad (vertex names):
#> [1] F->A A->F
#>
#>