Pagini recente » Cod sursa (job #2748090) | Cod sursa (job #2076165) | Cod sursa (job #2742751) | Cod sursa (job #1732470) | Cod sursa (job #3293973)
use std::collections::LinkedList;
use std::fs::File;
use std::io::{self, BufRead, Write};
use std::path::Path;
use std::vec;
fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
where
P: AsRef<Path>,
{
let file = File::open(filename)?;
Ok(io::BufReader::new(file).lines())
}
fn dfs(source: usize, visited: &mut Vec<bool>, graph: &Vec<LinkedList<usize>>) {
if visited[source] {
return;
}
visited[source] = true;
for el in &graph[source] {
dfs(*el, visited, graph);
}
}
fn main() {
if let Ok(lines) = read_lines("./dfs.in") {
let mut iter = lines;
let l = iter.next().unwrap().unwrap();
let (n, m) = l
.split_once(' ')
.map(|s| (s.0.parse::<usize>().unwrap(), s.1.parse::<usize>().unwrap()))
.unwrap();
let mut graph: Vec<LinkedList<usize>> = vec![LinkedList::new(); n + 1];
for _ in 0..m {
let l = iter.next().unwrap().unwrap();
let (u, v) = l
.split_once(' ')
.map(|s| (s.0.parse::<usize>().unwrap(), s.1.parse::<usize>().unwrap()))
.unwrap();
graph[u].push_back(v);
graph[v].push_back(u);
}
let mut visited = vec![false; n + 1];
let mut count = 0;
for i in 1..=n {
if !visited[i] {
count += 1;
dfs(i, &mut visited, &mut graph);
}
}
let mut f = std::fs::File::create("dfs.out").unwrap();
writeln!(f, "{}", count).unwrap();
}
}