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() 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 self.vertices
.iter() .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) .map(|v| v.name)
} }
@ -107,12 +108,12 @@ impl Graph {
} }
pub fn binary_vertex(graph: &mut Graph, k: u16) -> Option<Vec<u16>> { 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, Some(vertex) => vertex,
None => { None => {
return { return {
let mut c = 0; 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); graph.remove_vertex(vertex);
c += 1; c += 1;
} }
@ -195,7 +196,7 @@ pub fn reduction(graph: &mut Graph, k: u16) -> Option<Vec<u16>> {
} }
r 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); graph.remove_vertex(vertex);
match reduction(graph, k - 1) { 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 { if k < 1 {
return None; return None;
} }