diff --git a/src/main.rs b/src/main.rs index be80f40..584ffe5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,16 @@ mod merge_sort; mod quick_sort; +mod ssc; mod min_cut; mod util; use crate::util::read_to_graph; +use crate::util::read_to_directed_graph; use crate::util::read_to_vector; use crate::min_cut::min_cut; use crate::quick_sort::quick_sort; use crate::merge_sort::merge_sort_inversions; +use crate::ssc::ssc; #[allow(dead_code)] fn c1a2() { @@ -44,8 +47,16 @@ fn c1a4() { println!("course 1 assignment 4: {:?}", smalles_min_cut); } +#[allow(dead_code)] +fn c2a1() { + let g = read_to_directed_graph("data/course_2_assignment_1.txt").unwrap(); + let s = ssc(g); + println!("{:?}", s); +} + fn main() { // c1a2(); // c1a3(); - c1a4(); + // c1a4(); + c2a1(); } diff --git a/src/min_cut.rs b/src/min_cut.rs index db45f02..dd6bd90 100644 --- a/src/min_cut.rs +++ b/src/min_cut.rs @@ -1,12 +1,7 @@ use rand::Rng; +use crate::util::Graph; use std::convert::TryInto; -#[derive(Debug, Clone)] -pub struct Graph { - pub nodes: Vec, - pub edges: Vec<(u32, u32)>, -} - pub fn min_cut(mut g: Graph) -> u32 { let mut rng = rand::thread_rng(); // println!("min_cut({:?})\n", g); diff --git a/src/ssc.rs b/src/ssc.rs new file mode 100644 index 0000000..38b3c6b --- /dev/null +++ b/src/ssc.rs @@ -0,0 +1,5 @@ +use crate::util::Graph; + +pub fn ssc(_g: Graph) -> u32 { + 0 +} diff --git a/src/util.rs b/src/util.rs index 543a9f1..b8ddf1b 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,9 +1,13 @@ -use crate::min_cut::Graph; use std::fs::File; use std::io; use std::io::{BufRead, BufReader, Error, ErrorKind}; use std::vec::Vec; +#[derive(Debug, Clone)] +pub struct Graph { + pub nodes: Vec, + pub edges: Vec<(u32, u32)>, +} pub fn read_to_vector(path: &str) -> Result, io::Error> { let file = File::open(path)?; @@ -44,4 +48,21 @@ pub fn read_to_graph(path: &str) -> Result { } } Ok(g) -} \ No newline at end of file +} + +pub fn read_to_directed_graph(path: &str) -> Result { + let mut g = Graph { nodes: vec![], edges: vec![] }; + let file = File::open(path)?; + let br = BufReader::new(file); + + for line in br.lines() { + let line = line?; + let mut nodes = line.split_whitespace(); + let first_node = nodes.next().unwrap().parse().unwrap(); + let second_node = nodes.next().unwrap().parse().unwrap(); + let edge = (first_node, second_node); + g.edges.push(edge); + } + println!("{:?}", g); + Ok(g) +}