Skip to content

Commit 9057ffd

Browse files
committed
skip copy if unnecessary
1 parent d45b52e commit 9057ffd

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/sage/graphs/cycle_enumeration.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,15 @@ def _all_cycles_iterator_vertex(self, vertex, starting_vertices=None, simple=Fal
165165
# First we remove vertices and edges that are not part of any cycle
166166
if remove_acyclic_edges:
167167
sccs = self.strongly_connected_components()
168-
d = {}
169-
for id, component in enumerate(sccs):
170-
for v in component:
171-
d[v] = id
172-
h = copy(self)
173-
h.delete_edges((u, v) for u, v in h.edge_iterator(labels=False) if d[u] != d[v])
168+
if len(sccs) == 1:
169+
h = self
170+
else:
171+
d = {}
172+
for id, component in enumerate(sccs):
173+
for v in component:
174+
d[v] = id
175+
h = copy(self)
176+
h.delete_edges((u, v) for u, v in h.edge_iterator(labels=False) if d[u] != d[v])
174177
else:
175178
h = self
176179

@@ -569,12 +572,15 @@ def all_cycles_iterator(self, starting_vertices=None, simple=False,
569572
# Since a cycle is always included in a given strongly connected
570573
# component, we may remove edges from the graph
571574
sccs = self.strongly_connected_components()
572-
d = {}
573-
for id, component in enumerate(sccs):
574-
for v in component:
575-
d[v] = id
576-
h = copy(self)
577-
h.delete_edges((u, v) for u, v in h.edge_iterator(labels=False) if d[u] != d[v])
575+
if len(sccs) == 1:
576+
h = self
577+
else:
578+
d = {}
579+
for id, component in enumerate(sccs):
580+
for v in component:
581+
d[v] = id
582+
h = copy(self)
583+
h.delete_edges((u, v) for u, v in h.edge_iterator(labels=False) if d[u] != d[v])
578584
else:
579585
h = self
580586
# We create one cycles iterator per vertex. This is necessary if we

0 commit comments

Comments
 (0)