Get nodes with max degree first
This commit is contained in:
parent
9ec5e10c0b
commit
67fcde4309
1 changed files with 7 additions and 6 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue