Cod sursa(job #2679593)

Utilizator mstevanStevan mstevan Data 30 noiembrie 2020 22:59:47
Problema BFS - Parcurgere in latime Scor 20
Compilator java Status done
Runda Arhiva educationala Marime 1.96 kb
import java.util.*;
import java.io.*;

public class Main {
    private static int n;
    private static int m;
    private static int root;
    private static ArrayList<Integer> [] graph;
    private static int [] visited;
    private static LinkedList<Integer> queue;

    public static void main(String []args) {
        File inputFile = new File("bfs.in");
        File outputFile = new File("bfs.out");

        try {
            FileInputStream inputStream = new FileInputStream(inputFile);
            Scanner scanner = new Scanner(inputStream);
            n = scanner.nextInt(); // number of nodes - how many lists
            m = scanner.nextInt(); // number of edges - how many rows
            root = scanner.nextInt() - 1; // source - root
            graph = new ArrayList[n];
            visited = new int [n];
            for (int i = 0; i < n; i++){
                graph[i] = new ArrayList<Integer>();
                visited[i] = -1;
            }
            visited[root] = 0;
            for (int i = 0; i < m; i++){
                int x = scanner.nextInt();
                int y = scanner.nextInt();
                graph[x - 1].add(y - 1);
            }

            inputStream.close();

            queue = new LinkedList<Integer>();
            queue.push(root);
            while (queue.size() > 0){
                int node = queue.pop();
                for (int adjacentNode: graph[node]) {
                    if (visited[adjacentNode] == -1) {
                        queue.push(adjacentNode);
                        visited[adjacentNode] = visited[node] + 1;
                    }
                }
            }

            FileOutputStream outputStream = new FileOutputStream(outputFile);
            PrintWriter writer = new PrintWriter(outputStream);

            for (int i = 0; i < n; i++){
                writer.print(visited[i] + " ");
            }

            writer.close();
            outputStream.close();
        } catch(IOException e) {

        }
    }
}