dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::{
    argmax::argmax,
    tree_bfs_parent_depth::bfs,
};

pub fn diameter_path(g: &[Vec<usize>]) -> Vec<usize> {
    let (_, dep) = bfs(&g, 0);

    let (parent, dep) = bfs(&g, argmax(&dep));

    let mut v = argmax(&dep);

    let mut path = vec![v];

    for _ in 0..dep[v] {
        v = parent[v];

        path.push(v);
    }

    path
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let cases = vec![(
            vec![
                vec![1],
                vec![0, 2],
                vec![1, 3, 4],
                vec![2],
                vec![2, 5],
                vec![4],
            ],
            vec![0, 1, 2, 4, 5],
        )];

        for (g, ans) in cases {
            assert_eq!(diameter_path(&g), ans);
        }
    }
}