Fix residual graph generation, minor algorithm refactorings

This commit is contained in:
2025-03-26 14:53:35 +01:00
parent 3f93cb57d3
commit c21d648c8f
4 changed files with 12 additions and 68 deletions

View File

@@ -1,5 +1,5 @@
use egui_graphs::{DefaultNodeShape, Graph, default_edge_transform, default_node_transform, to_graph_custom};
use petgraph::{stable_graph::{StableGraph, NodeIndex}, Directed};
use petgraph::{stable_graph::{NodeIndex, StableGraph}, visit::{VisitMap, Visitable}, Directed};
use egui::Pos2;
use crate::layout::CustomEdgeShape;
use egui::Color32;
@@ -19,9 +19,10 @@ impl ResidualGraph for StableGraph<(f32, f32), (u64, u64)> {
let (reverse_flow, reverse_capacity) = *res_graph.edge_weight(reverse_edge).expect("reverse edge not found");
// update the forward edge
// TODO: this seems to overflow in certain cases
res_graph.update_edge(source, target, (flow, capacity + reverse_flow - flow));
res_graph.update_edge(source, target, (flow, capacity + reverse_flow));
// update the reverse edge
res_graph.update_edge(target, source, (reverse_flow, reverse_capacity + flow - reverse_flow));
//res_graph.update_edge(target, source, (reverse_flow, reverse_capacity + flow));
} else {
// add a residual edge with a flow of 0 if the reverse edge doesn't exist
res_graph.add_edge(target, source, (0, 0));