グラフのBFS(幅優先探索)

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");
}