diff options
Diffstat (limited to 'rust/graph/graph.rs')
-rw-r--r-- | rust/graph/graph.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/rust/graph/graph.rs b/rust/graph/graph.rs new file mode 100644 index 0000000..a4e2d11 --- /dev/null +++ b/rust/graph/graph.rs @@ -0,0 +1,42 @@ +extern crate itertools; + +use std::cell::RefCell; +use std::rc::Rc; +use itertools::Itertools; + +struct Node { + label: i32, + neighbors: Vec<Rc<RefCell<Node>>>, +} + +fn main () { + let mut nodes : Vec<Rc<RefCell<Node>>> = Vec::new(); + + fn make_node(label: i32) -> Rc<RefCell<Node>> { + Rc::new(RefCell::new(Node { + label: label, + neighbors: vec!() + })) + } + + let node1 = make_node(1); + let node2 = make_node(2); + let node3 = make_node(3); + node1.borrow_mut().neighbors.push(node2.clone()); + node2.borrow_mut().neighbors.push(node1.clone()); + node2.borrow_mut().neighbors.push(node3.clone()); + + nodes.push(node1.clone()); + nodes.push(node2.clone()); + nodes.push(node3.clone()); + + for n in nodes { + println!("node: {}", n.borrow().label); + let neighbors: String = n.borrow() + .neighbors + .iter() + .map(|n| n.borrow().label.to_string()) + .join(", "); + println!("neighbors: {}", neighbors); + } +} |