blob: 30ffc35ac47ce2ddc84ce800f73a887a19b5129a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
extern crate itertools;
use std::cell::RefCell;
use std::rc::Rc;
use itertools::Itertools;
struct Node {
label: i32,
neighbors: Vec<Rc<RefCell<Node>>>,
}
type RefNode = Rc<RefCell<Node>>;
fn make_graph() -> Vec<RefNode> {
let mut nodes : Vec<RefNode> = vec!();
{
let mut make_node = |label: i32| {
let node = Rc::new(RefCell::new(Node {
label: label,
neighbors: vec!()
}));
nodes.push(node.clone());
node.clone()
};
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
}
fn main () {
let nodes = make_graph();
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);
}
}
|