modular-decomposition 0.3.0

A library for computing the modular decomposition of a graph
Documentation
use petgraph::graph::{NodeIndex, UnGraph};

pub(crate) fn empty_graph(n: usize) -> UnGraph<(), ()> {
    let mut graph = UnGraph::new_undirected();
    for _ in 0..n {
        graph.add_node(());
    }
    graph
}

pub(crate) fn complete_graph(n: usize) -> UnGraph<(), ()> {
    let mut graph = empty_graph(n);
    for i in 0..n {
        for j in i + 1..n {
            graph.add_edge(NodeIndex::new(i), NodeIndex::new(j), ());
        }
    }
    graph
}

pub(crate) fn path_graph(n: usize) -> UnGraph<(), ()> {
    let mut graph = empty_graph(n);
    for i in 1..n {
        graph.add_edge(NodeIndex::new(i - 1), NodeIndex::new(i), ());
    }
    graph
}

pub(crate) fn pace2023_exact_024() -> UnGraph<(), ()> {
    UnGraph::from_edges([
        (0, 1),
        (1, 2),
        (1, 3),
        (4, 5),
        (4, 6),
        (4, 7),
        (3, 4),
        (5, 6),
        (5, 8),
        (5, 9),
        (5, 10),
        (5, 11),
        (5, 12),
        (3, 5),
        (5, 13),
        (6, 8),
        (3, 6),
        (6, 14),
        (6, 15),
        (6, 16),
        (8, 10),
        (8, 15),
        (8, 13),
        (8, 16),
        (17, 18),
        (17, 19),
        (0, 20),
        (3, 20),
        (9, 11),
        (11, 12),
        (9, 21),
        (0, 21),
        (21, 22),
        (13, 23),
        (24, 25),
        (26, 27),
        (15, 28),
        (28, 29),
        (0, 30),
        (3, 30),
        (9, 31),
        (10, 31),
        (26, 31),
        (12, 31),
        (32, 33),
        (13, 33),
        (34, 35),
        (14, 35),
        (9, 10),
        (9, 26),
        (9, 12),
        (9, 29),
        (9, 16),
        (10, 26),
        (10, 12),
        (10, 15),
        (10, 13),
        (36, 37),
        (16, 36),
        (12, 26),
        (3, 26),
        (15, 26),
        (26, 32),
        (0, 26),
        (0, 2),
        (2, 3),
        (2, 37),
        (2, 16),
        (12, 29),
        (12, 15),
        (12, 32),
        (0, 12),
        (12, 16),
        (0, 3),
        (18, 19),
        (16, 37),
        (32, 35),
        (32, 38),
        (15, 29),
        (29, 32),
        (16, 29),
        (15, 32),
        (0, 15),
        (15, 16),
        (13, 32),
        (0, 32),
        (0, 22),
        (0, 13),
        (16, 39),
    ])
}

pub(crate) fn pace2023_exact_054() -> UnGraph<(), ()> {
    UnGraph::from_edges([
        (0, 1),
        (0, 2),
        (1, 2),
        (2, 3),
        (4, 5),
        (6, 7),
        (6, 8),
        (0, 9),
        (9, 10),
        (0, 6),
        (0, 8),
        (0, 11),
        (0, 12),
        (0, 13),
        (0, 10),
        (1, 14),
        (1, 12),
        (1, 15),
        (3, 14),
        (3, 11),
        (2, 11),
        (2, 16),
        (2, 12),
        (4, 17),
        (6, 11),
        (14, 18),
        (14, 15),
        (8, 11),
        (5, 17),
        (11, 12),
        (7, 19),
        (7, 20),
        (7, 10),
        (13, 19),
        (10, 20),
        (10, 19),
        (12, 16),
        (1, 16),
        (1, 3),
        (3, 16),
        (3, 12),
        (8, 14),
        (12, 14),
        (13, 14),
        (14, 20),
        (8, 13),
        (11, 16),
        (11, 20),
        (7, 13),
        (13, 20),
        (16, 20),
        (12, 20),
        (17, 21),
        (7, 22),
        (18, 22),
        (13, 22),
        (20, 22),
        (3, 23),
        (13, 18),
        (18, 20),
        (24, 25),
        (8, 16),
        (5, 26),
        (17, 26),
        (21, 27),
        (3, 22),
        (22, 28),
        (22, 29),
        (8, 22),
        (10, 22),
        (21, 30),
        (26, 30),
        (30, 31),
        (5, 30),
        (32, 33),
        (32, 34),
        (34, 35),
        (26, 31),
        (8, 28),
        (8, 29),
        (8, 36),
        (8, 20),
        (8, 10),
        (5, 37),
        (33, 35),
        (26, 38),
        (23, 36),
        (11, 23),
        (3, 20),
        (20, 29),
        (10, 28),
        (11, 36),
        (8, 23),
        (20, 28),
        (39, 40),
        (36, 41),
        (36, 39),
        (11, 41),
        (23, 41),
        (39, 41),
        (11, 33),
        (10, 36),
        (21, 42),
        (8, 41),
        (43, 44),
        (2, 28),
        (12, 28),
        (45, 46),
        (42, 47),
        (48, 49),
        (48, 50),
        (51, 52),
        (49, 50),
        (53, 54),
        (55, 56),
        (57, 58),
        (8, 59),
        (23, 39),
        (47, 60),
        (58, 61),
        (58, 62),
        (43, 63),
        (43, 61),
        (43, 64),
        (65, 66),
        (65, 67),
        (66, 67),
        (68, 69),
        (51, 70),
        (71, 72),
        (10, 11),
        (43, 66),
    ])
}