use std::fmt;
use super::UF;
pub struct UnionFind {
id: Vec<usize>
}
impl UF for UnionFind {
fn new(n: usize) -> UnionFind {
UnionFind { id: (0..n).collect() }
}
fn union(&mut self, p: usize, q: usize) {
let pid = self.id[p];
let qid = self.id[q];
for val in self.id.iter_mut() {
if *val == pid {
*val = qid
}
}
}
fn connected(&self, p: usize, q: usize) -> bool {
self.id[p] == self.id[q]
}
}
impl fmt::Display for UnionFind {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
for i in self.id.iter() {
try!(write!(f, "{} ", i));
}
Ok(())
}
}