fix random generator capacity, add Dinic's algo, add options for filtering empty flows & displaying residual graph
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use petgraph::data::Build;
|
||||
use petgraph::stable_graph::{StableGraph, NodeIndex};
|
||||
use petgraph::{Directed};
|
||||
use egui_graphs::{default_edge_transform, default_node_transform, to_graph_custom, DefaultEdgeShape, DefaultNodeShape, Graph};
|
||||
@@ -70,9 +71,10 @@ impl MaxflowProblem {
|
||||
// otherwise insert the edge and its residual edge
|
||||
inserted_edges.push((node1, node2));
|
||||
inserted_edges.push((node2, node1));
|
||||
let capacity: u64 = rng.gen_range(1..=max_capacity);
|
||||
graph.add_edge(node1, node2, (0, capacity));
|
||||
graph.add_edge(node2, node1, (0, capacity));
|
||||
let capacity1: u64 = rng.gen_range(1..=max_capacity);
|
||||
let capacity2: u64 = rng.gen_range(1..=max_capacity);
|
||||
graph.add_edge(node1, node2, (0, capacity1));
|
||||
graph.add_edge(node2, node1, (0, capacity2));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,6 +103,14 @@ impl MaxflowProblem {
|
||||
}
|
||||
}
|
||||
|
||||
// set all flows back to zero
|
||||
pub fn reset_flow(&mut self) {
|
||||
for edge in self.g.edge_indices().collect::<Vec<_>>() {
|
||||
let weight = self.g.edge_weight_mut(edge).expect("edge not found");
|
||||
(*weight).0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_gui_graph(&self) -> Graph<(f32, f32), (u64, u64), Directed, u32, DefaultNodeShape, CustomEdgeShape> {
|
||||
let mut graph = to_graph_custom(&self.g,
|
||||
|n| {
|
||||
|
||||
Reference in New Issue
Block a user