aboutsummaryrefslogtreecommitdiff
path: root/sem1/algo/graph/src
diff options
context:
space:
mode:
Diffstat (limited to 'sem1/algo/graph/src')
-rw-r--r--sem1/algo/graph/src/graph.rs85
-rw-r--r--sem1/algo/graph/src/main.rs23
2 files changed, 0 insertions, 108 deletions
diff --git a/sem1/algo/graph/src/graph.rs b/sem1/algo/graph/src/graph.rs
deleted file mode 100644
index cefd24f..0000000
--- a/sem1/algo/graph/src/graph.rs
+++ /dev/null
@@ -1,85 +0,0 @@
-use std::rc::{Rc, Weak};
-use std::cell::RefCell;
-use std::vec::Vec;
-use std::string::String;
-use std::collections::HashMap;
-use std::fmt;
-
-type EdgeRef = RefCell<Edge>;
-type VertexRef = RefCell<Vertex>;
-
-pub struct Edge {
- from: Weak<VertexRef>,
- to: Weak<VertexRef>,
- weight: i32,
-}
-
-pub struct Vertex {
- name: String,
- pub adj: Vec<Rc<EdgeRef>>,
-}
-
-pub struct Graph {
- vertexes: HashMap<String, Rc<VertexRef>>,
- edges: Vec<Rc<EdgeRef>>,
-}
-
-impl Vertex {
- pub fn new(name: &str) -> VertexRef {
- RefCell::new( Vertex { name: String::from(name), adj: Vec::new() })
- }
-}
-
-impl Graph {
- pub fn new() -> Graph {
- Graph { vertexes: HashMap::new(), edges: Vec::new() }
- }
-
- pub fn edge(&mut self, from: &str, to: &str, weight: i32) {
- let from = match self.vertexes.get(from) {
- Some(rc) => Rc::clone(rc),
- None => self.add_vertex(from),
- };
-
- let to = match self.vertexes.get(to) {
- Some(rc) => Rc::clone(rc),
- None => self.add_vertex(to),
- };
-
- // Create edge
- let e = Rc::new(RefCell::new( Edge { from: Rc::downgrade(&from), to: Rc::downgrade(&to), weight } ));
-
- // Add to stuff
- from.borrow_mut().adj.push(Rc::clone(&e));
- self.edges.push(e);
-
- }
-
- pub fn borrow_vertex(&self, name: &str) -> Option<Rc<VertexRef>> {
- self.vertexes.get(name).and_then(|rc| Some(Rc::clone(rc)))
- }
-
- fn add_vertex(&mut self, name: &str) -> Rc<VertexRef> {
- let v = Rc::new( Vertex::new(name) );
-
- // Insert in hashmap
- self.vertexes.insert(String::from(name), Rc::clone(&v));
-
- // Return vertex
- v
- }
-
-}
-
-impl fmt::Display for Edge {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- let rc = self.to.upgrade().unwrap();
- write!(f, "{}", Rc::clone(&rc).borrow())
- }
-}
-
-impl fmt::Display for Vertex {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "{}", self.name)
- }
-}
diff --git a/sem1/algo/graph/src/main.rs b/sem1/algo/graph/src/main.rs
deleted file mode 100644
index 4f732e7..0000000
--- a/sem1/algo/graph/src/main.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-
-mod graph;
-
-use graph::Graph;
-
-fn main() {
-
- let mut g = Graph::new();
-
- g.edge("a", "b", 10);
- g.edge("a", "c", 10);
- g.edge("a", "d", 10);
-
- // Ahh this is hard
- let v = g.borrow_vertex("a").unwrap();
- let v23 = v.borrow();
- let mut it = v23.adj.iter();
- for e in it {
- println!("{}", e.borrow());
- }
-
- println!("Hello, world!");
-}