use std::collections::HashMap;
use std::collections::VecDeque;
fn bfs(graph: HashMap<&str, Vec<&str>>, start: &str) {
   let mut deque: VecDeque<&str> = VecDeque::new();
   let mut visited: Vec<&str> = Vec::new();
   deque.push_back(start);
   while !deque.is_empty() {
      let vertex = deque.pop_front().unwrap();
      if !visited.contains(&vertex) {
         visited.push(vertex);
         if graph.get(vertex) != None {
            let vs = graph.get(vertex).unwrap();
            for v in vs {
               // println!("{}", v);
               deque.push_back(v);
            }
         }
      }
   }
}
fn main() {
   let mut graph: HashMap<&str, Vec<&str>> = HashMap::new();
   graph.insert("A", vec!["B", "C"]);
   graph.insert("B", vec!["A", "D", "E"]);
   graph.insert("C", vec!["A", "F"]);
   graph.insert("D", vec!["B"]);
   graph.insert("E", vec!["B", "F"]);
   graph.insert("F", vec!["C", "E"]);
   println!("{:?}", graph);
   bfs(graph, "A");
}