use hypergraphx::prelude::*;
fn main() {
undirected();
directed();
}
fn undirected() {
let mut graph = UndirectedHypergraph::new();
graph.add_nodes((0..7).map(|x| format!("Node {}", x)));
graph
.add_edges(
vec![
("Edge 0", vec![0, 1]),
("Edge 1", vec![2, 3]),
("Edge 2", vec![1, 2, 4]),
("Edge 3", vec![5, 6]),
("Edge 4", vec![0, 1, 2]),
("Edge 5", vec![3, 4, 1, 0]),
]
.into_iter(),
)
.unwrap();
dbg!(graph.connected_components());
dbg!(graph.is_connected());
dbg!(graph.component(0));
dbg!(graph.degree_sequence());
dbg!(graph.edges_connecting(0, 1));
dbg!(graph.dual());
}
fn directed() {
let mut graph = DirectedHypergraph::new();
graph.add_nodes((0..13).map(|x| format!("Node {}", x)));
graph
.add_edges(
vec![
("Edge 0".to_string(), vec![0, 1], vec![2, 3]),
("Edge 1".to_string(), vec![2, 3], vec![0, 1]),
("Edge 2".to_string(), vec![0, 2], vec![1, 3]),
]
.into_iter(),
)
.unwrap();
graph
.add_edges(
vec![
("Edge 3".to_string(), vec![10, 11], vec![12, 13]),
("Edge 4".to_string(), vec![12, 13], vec![10, 11]),
("Edge 5".to_string(), vec![10, 12], vec![11, 13]),
]
.into_iter(),
)
.unwrap();
graph
.add_edges((4..9).map(|i| (format!("Edge {}", i + 2), vec![i], vec![i + 1])))
.unwrap();
graph
.add_edges(
vec![
("Edge 9".to_string(), vec![0, 1, 2], vec![3, 4, 5]),
("Edge 10".to_string(), vec![6, 7, 8], vec![9, 10, 11]),
("Edge 11".to_string(), vec![9], vec![4]),
]
.into_iter(),
)
.unwrap();
dbg!(graph.strongly_connected_components());
dbg!(graph.weakly_connected_components());
dbg!(graph.is_weakly_connected());
dbg!(graph.is_strongly_connected());
dbg!(graph.strong_component(4));
dbg!(graph.out_degree_sequence());
dbg!(graph.in_degree_sequence());
dbg!(graph.edges_connecting(0, 1));
dbg!(graph.dual());
dbg!(graph.digraph_view());
}