74 lines
2.3 KiB
Rust
74 lines
2.3 KiB
Rust
//! Demonstration of BoundedInstance using DeterministicLocalKCut
|
|
//!
|
|
//! This example shows how to use the production BoundedInstance
|
|
//! implementation with the LocalKCut oracle.
|
|
|
|
use ruvector_mincut::prelude::*;
|
|
|
|
fn main() {
|
|
println!("BoundedInstance Demo");
|
|
println!("===================\n");
|
|
|
|
// Create a dynamic graph
|
|
let graph = DynamicGraph::new();
|
|
|
|
// Create a bounded instance for range [1, 5]
|
|
let mut instance = BoundedInstance::init(&graph, 1, 5);
|
|
|
|
println!("Created BoundedInstance with bounds: {:?}", instance.bounds());
|
|
|
|
// Add a simple path graph: 0 -- 1 -- 2
|
|
println!("\nAdding path graph: 0 -- 1 -- 2");
|
|
instance.apply_inserts(&[
|
|
(0, 0, 1),
|
|
(1, 1, 2),
|
|
]);
|
|
|
|
// Query the minimum cut
|
|
match instance.query() {
|
|
InstanceResult::ValueInRange { value, witness } => {
|
|
println!("Found cut with value: {}", value);
|
|
println!("Witness seed: {}", witness.seed());
|
|
println!("Witness cardinality: {}", witness.cardinality());
|
|
}
|
|
InstanceResult::AboveRange => {
|
|
println!("Cut value is above range");
|
|
}
|
|
}
|
|
|
|
// Add edge to form a cycle: 0 -- 1 -- 2 -- 0
|
|
println!("\nAdding edge to form cycle: 2 -- 0");
|
|
instance.apply_inserts(&[(2, 2, 0)]);
|
|
|
|
// Query again
|
|
match instance.query() {
|
|
InstanceResult::ValueInRange { value, witness } => {
|
|
println!("Found cut with value: {}", value);
|
|
println!("Witness seed: {}", witness.seed());
|
|
println!("Witness cardinality: {}", witness.cardinality());
|
|
}
|
|
InstanceResult::AboveRange => {
|
|
println!("Cut value is above range");
|
|
}
|
|
}
|
|
|
|
// Delete an edge to break the cycle
|
|
println!("\nDeleting edge: 1 -- 2");
|
|
instance.apply_deletes(&[(1, 1, 2)]);
|
|
|
|
// Query final state
|
|
match instance.query() {
|
|
InstanceResult::ValueInRange { value, witness } => {
|
|
println!("Found cut with value: {}", value);
|
|
println!("Witness seed: {}", witness.seed());
|
|
}
|
|
InstanceResult::AboveRange => {
|
|
println!("Cut value is above range");
|
|
}
|
|
}
|
|
|
|
// Get certificate
|
|
let cert = instance.certificate();
|
|
println!("\nCertificate has {} LocalKCut responses", cert.localkcut_responses.len());
|
|
}
|