From 3f2c8b0321a56dca9338058a6a612bb1b79c0b36 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Thu, 9 Jun 2016 20:49:53 -0400 Subject: Graph representation in rust. --- rust/graph/Cargo.toml | 11 +++++++++++ rust/graph/graph.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 rust/graph/Cargo.toml create mode 100644 rust/graph/graph.rs 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 "] + +[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>>, +} + +fn main () { + let mut nodes : Vec>> = Vec::new(); + + fn make_node(label: i32) -> Rc> { + 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); + } +} -- cgit v1.2.3