dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::{
    union_find_low_memory_with_trait::UnionFind,
    union_find_traits::*,
};

pub fn spanning_forest(
    v_size: usize,
    edges: &[(usize, usize)],
) -> Vec<usize> {
    let mut ids = vec![];

    let mut uf = UnionFind::new(v_size);

    for (i, &(u, v)) in edges.iter().enumerate() {
        if uf.same(u, v) {
            continue;
        }

        uf.unite(u, v);

        ids.push(i);
    }

    ids
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let n = 6;

        let edges = vec![(0, 1), (1, 2), (3, 5), (2, 0), (4, 3)];

        assert_eq!(spanning_forest(n, &edges), [0, 1, 2, 4]);
    }
}