dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
pub fn bfs<F, H>(
    g: &[Vec<usize>],
    mut f: F,
    mut h: H,
) where
    F: FnMut(usize, usize),
    H: FnMut(usize),
{
    let n = g.len();

    let mut in_deg = vec![0; n];

    for u in 0..n {
        for &v in g[u].iter() {
            in_deg[v] += 1;
        }
    }

    let mut que = std::collections::VecDeque::new();

    for i in 0..n {
        if in_deg[i] == 0 {
            que.push_back(i);
        }
    }

    while let Some(u) = que.pop_front() {
        h(u);

        for &v in g[u].iter() {
            f(u, v);

            in_deg[v] -= 1;

            if in_deg[v] == 0 {
                que.push_back(v);
            }
        }
    }
}

#[cfg(test)]

mod tests {

    #[test]

    fn test() {}
}