From 67fcde43097fda424fcb66b817ae217de8dd06dc Mon Sep 17 00:00:00 2001 From: hal8174 Date: Sat, 16 Nov 2024 15:46:56 +0100 Subject: [PATCH] Get nodes with max degree first --- vertex_cover/src/owned.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vertex_cover/src/owned.rs b/vertex_cover/src/owned.rs index 177ae33..d494345 100644 --- a/vertex_cover/src/owned.rs +++ b/vertex_cover/src/owned.rs @@ -77,10 +77,11 @@ impl Graph { self.vertices[(self.vertices.len() - n)..].iter() } - fn get_vertex_with_degree_greater(&self, min_degree: u16) -> Option { + fn get_vertex_with_max_degree_greater_equal(&self, min_degree: u16) -> Option { self.vertices .iter() - .find(|&v| v.edges.len() >= min_degree as usize) + .max_by_key(|&v| v.edges.len()) + .filter(|&v| v.edges.len() >= min_degree as usize) .map(|v| v.name) } @@ -107,12 +108,12 @@ impl Graph { } pub fn binary_vertex(graph: &mut Graph, k: u16) -> Option> { - let vertex = match graph.get_vertex_with_degree_greater(2) { + let vertex = match graph.get_vertex_with_max_degree_greater_equal(2) { Some(vertex) => vertex, None => { return { let mut c = 0; - while let Some(vertex) = graph.get_vertex_with_degree_greater(1) { + while let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(1) { graph.remove_vertex(vertex); c += 1; } @@ -195,7 +196,7 @@ pub fn reduction(graph: &mut Graph, k: u16) -> Option> { } r - } else if let Some(vertex) = graph.get_vertex_with_degree_greater(2) { + } else if let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(2) { graph.remove_vertex(vertex); match reduction(graph, k - 1) { @@ -347,7 +348,7 @@ pub fn reduction2(graph: &mut Graph, k: u16) -> Option> { } } } - } else if let Some(vertex) = graph.get_vertex_with_degree_greater(3) { + } else if let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(3) { if k < 1 { return None; }