Cod sursa(job #3364883)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 12 septembrie 2026 18:33:15
Problema BFS - Parcurgere in latime Scor 100
Compilator rs Status done
Runda Arhiva educationala Marime 1.14 kb
use std::fs;
use std::io::{BufWriter, Write};
use std::collections::VecDeque;
fn bfs(start_node: usize, g: &Vec<Vec<usize>>, d: &mut Vec<i32>) -> () {
    let mut q: VecDeque<usize> = VecDeque::new();
    d[start_node] = 0;
    q.push_back(start_node);
    while let Some(node) = q.pop_front() {
        for &son in &g[node] {
            if d[son] == -1 {
                q.push_back(son);
                d[son] = d[node] + 1;
            }
        }
    }
}

fn main() {

    let file = fs::File::create("bfs.out").unwrap();
    let mut writer = BufWriter::new(file);

    let input: String = fs::read_to_string("bfs.in").unwrap();
    let mut tokens = input.split_whitespace();

    let mut next_num = || -> usize {
        tokens.next().unwrap().parse::<usize>().unwrap()
    };

    let (n, m, start_node) = (next_num(), next_num(), next_num());

    let mut g: Vec<Vec<usize>> = vec![vec![]; n + 1];
    for _ in 0..m {
        let (x, y) = (next_num(), next_num());
        g[x].push(y);
    }

    let mut dist: Vec<i32> = vec![-1; n + 1];
    bfs(start_node, &g, &mut dist);

    for i in 1..=n {
        write!(writer, "{} ", dist[i]).unwrap();
    }

}