diff options
Diffstat (limited to 'rust')
-rw-r--r-- | rust/graph/Cargo.toml | 11 | ||||
-rw-r--r-- | rust/graph/graph.rs | 42 |
2 files changed, 53 insertions, 0 deletions
diff --git a/rust/graph/Cargo.toml b/rust/graph/Cargo.toml new file mode 100644 index 0000000..adabedc --- /dev/null +++ b/rust/graph/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "graph" +version = "0.1.0" +authors = ["Kjetil Orbekk <kjetil.orbekk@gmail.com>"] + +[dependencies] +itertools = "0.4.15" + +[[bin]] +name = "graph" +path = "graph.rs" 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); + } +} |