Get nodes with max degree first

This commit is contained in:
hal8174 2024-11-16 15:46:56 +01:00
parent 9ec5e10c0b
commit 67fcde4309

View file

@ -77,10 +77,11 @@ impl Graph {
self.vertices[(self.vertices.len() - n)..].iter()
}
fn get_vertex_with_degree_greater(&self, min_degree: u16) -> Option<u16> {
fn get_vertex_with_max_degree_greater_equal(&self, min_degree: u16) -> Option<u16> {
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<Vec<u16>> {
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<Vec<u16>> {
}
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<Vec<u16>> {
}
}
}
} 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;
}