diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-06-09 20:49:53 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-06-09 20:49:53 -0400 |
commit | 3f2c8b0321a56dca9338058a6a612bb1b79c0b36 (patch) | |
tree | 3cd3ffddc52eb4f36a6e6199cb20d52070561dac /rust/graph/graph.rs | |
parent | bd52727d465a777ee749b6649ca768ffe7e900b0 (diff) |
Graph representation in rust.
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); + } +} |