Cod sursa(job #1704386)

Utilizator bercarucostinBercaru Costin bercarucostin Data 18 mai 2016 18:34:57
Problema BFS - Parcurgere in latime Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 1.75 kb


import java.io.*;
import java.util.*;

class Bfs {

	static ArrayList<ArrayList<Integer>> graf = new ArrayList<ArrayList<Integer>>();
	static int[] p, dist, c;

	public static void bfs(int s) {

		dist[s] = 0;
		c[s] = 1;
		LinkedList<Integer> q = new LinkedList<Integer>();
		q.add(s);
		int u;
		while (!q.isEmpty()) {
			u = q.poll();
			for (int v : graf.get(u)) {
				if (c[v] == 0) {
					dist[v] = dist[u] + 1;
					p[v] = u;
					c[v] = 1;
					q.add(v);
				}
			}
			c[u] = 2;
			q.removeFirstOccurrence(u);
		}

	}

	public static void main(String[] args) throws IOException {

		BufferedReader in = null;
		BufferedWriter out = null;
		in = new BufferedReader(new FileReader("bfs.in"));
		out = new BufferedWriter(new FileWriter("bfs.out"));

		String[] line = in.readLine().split(" ");
		int n = Integer.parseInt(line[0]);
		int m = Integer.parseInt(line[1]);
		int s = Integer.parseInt(line[2]);
		int n1, n2;
		p = new int[n + 1];
		dist = new int[n + 1];
		c = new int[n + 1];
		for(int i = 0; i < n + 1; i ++)
			graf.add(i, new ArrayList<Integer>());
		for (int i = 0; i < m; i++) {
			line = in.readLine().split(" ");
			n1 = Integer.parseInt(line[0]);
			n2 = Integer.parseInt(line[1]);
			/*if (graf.size() <= n1)
				graf.add(n1, new ArrayList<Integer>());*/
			graf.get(n1).add(n2);
		}
		
		bfs(s);
		/*for(int i : dist)
			if(i == 0)
				if()
				System.out.println(-1);
			else
				System.out.println(i);*/
		for(int i = 1; i < n + 1; i ++){
			if(dist[i] == 0)
				if(i == s)
					out.write(String.valueOf(0));
				else
					out.write(String.valueOf(-1));
			else
				out.write(String.valueOf(dist[i]));
			if(i < n)
				out.write(" ");
		}
		in.close();
		out.close();
		
	}

}