Skip to content

Commit f3f271a

Browse files
committed
Correction: remove redundant self-loop check
1 parent 26146af commit f3f271a

File tree

1 file changed

+7
-22
lines changed

1 file changed

+7
-22
lines changed

rustworkx-core/src/connectivity/cycle_basis.rs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,13 @@ where
5959

6060
// Method used to retrieve all the edges between an origin node and a target node.
6161
// Can be used to check if a node loops back to itself by enabling equiv
62-
fn get_edge_between<G>(
63-
orig_graph: G,
64-
origin: G::NodeId,
65-
target: G::NodeId,
66-
equiv: bool,
67-
) -> Vec<G::EdgeId>
62+
fn get_edge_between<G>(orig_graph: G, origin: G::NodeId, target: G::NodeId) -> Vec<G::EdgeId>
6863
where
6964
G: IntoEdges,
7065
{
7166
orig_graph
7267
.edges(origin)
73-
.filter(|edge: &G::EdgeRef| {
74-
if equiv {
75-
edge.source() == target && edge.target() == target
76-
} else {
77-
edge.target() == target
78-
}
79-
})
68+
.filter(|edge: &G::EdgeRef| edge.target() == target)
8069
.map(|edge: G::EdgeRef| edge.id())
8170
.collect()
8271
}
@@ -105,7 +94,6 @@ where
10594
while !stack.is_empty() {
10695
// Use the last element added so that cycles are easier to find
10796
let z = stack.pop().unwrap();
108-
// println!("Length of all edges from: {:?}", edges.len());
10997
for neighbor in graph.neighbors(z) {
11098
// A new node was encountered:
11199
if !used.contains_key(&neighbor) {
@@ -117,7 +105,7 @@ where
117105
// A self loop:
118106
} else if z == neighbor {
119107
if edges {
120-
let cycle_edge: Vec<G::EdgeId> = get_edge_between(graph, z, z, true);
108+
let cycle_edge: Vec<G::EdgeId> = get_edge_between(graph, z, z);
121109
cycles_edges.push(cycle_edge);
122110
} else {
123111
let cycle: Vec<G::NodeId> = vec![z];
@@ -130,8 +118,7 @@ where
130118
if edges {
131119
let mut cycle: Vec<G::EdgeId> = Vec::new();
132120
// Retreive all edges from z to neighbor.
133-
let mut neigh_edge: Vec<G::EdgeId> =
134-
get_edge_between(graph, z, neighbor, false);
121+
let mut neigh_edge: Vec<G::EdgeId> = get_edge_between(graph, z, neighbor);
135122
// Append to cycle
136123
cycle.append(&mut neigh_edge);
137124

@@ -141,7 +128,7 @@ where
141128
while !pn.contains(p) {
142129
// Retrieve all edges from prev_p to p and vice versa
143130
let mut neigh_edge: Vec<G::EdgeId> =
144-
get_edge_between(graph, *prev_p, *p, false);
131+
get_edge_between(graph, *prev_p, *p);
145132
// Append to cycle
146133
cycle.append(&mut neigh_edge);
147134
// Update prev_p to p
@@ -150,12 +137,10 @@ where
150137
p = pred.get(p).unwrap();
151138
}
152139
// When loop ends add remaining edges from prev_p to p.
153-
let mut neigh_edge: Vec<G::EdgeId> =
154-
get_edge_between(graph, *prev_p, *p, false);
140+
let mut neigh_edge: Vec<G::EdgeId> = get_edge_between(graph, *prev_p, *p);
155141
cycle.append(&mut neigh_edge);
156142
// Also retreive all edges between the last p and neighbor
157-
let mut neigh_edge: Vec<G::EdgeId> =
158-
get_edge_between(graph, *p, neighbor, false);
143+
let mut neigh_edge: Vec<G::EdgeId> = get_edge_between(graph, *p, neighbor);
159144
cycle.append(&mut neigh_edge);
160145
// Once all edges within cycle have been found, push to cycle list.
161146
cycles_edges.push(cycle);

0 commit comments

Comments
 (0)