advanced_algorithms/graph/
mod.rs1pub mod dijkstra;
10pub mod astar;
11pub mod bellman_ford;
12pub mod floyd_warshall;
13
14use std::collections::HashMap;
15
16#[derive(Debug, Clone)]
18pub struct Graph {
19 pub edges: HashMap<usize, Vec<(usize, f64)>>,
21 pub n_nodes: usize,
23}
24
25impl Graph {
26 pub fn new(n_nodes: usize) -> Self {
28 Graph {
29 edges: HashMap::new(),
30 n_nodes,
31 }
32 }
33
34 pub fn add_edge(&mut self, u: usize, v: usize, weight: f64) {
36 self.edges.entry(u).or_default().push((v, weight));
37 }
38
39 pub fn add_undirected_edge(&mut self, u: usize, v: usize, weight: f64) {
41 self.add_edge(u, v, weight);
42 self.add_edge(v, u, weight);
43 }
44
45 pub fn neighbors(&self, u: usize) -> &[(usize, f64)] {
47 self.edges.get(&u).map(|v| v.as_slice()).unwrap_or(&[])
48 }
49}