Pagini recente » Monitorul de evaluare | Cod sursa (job #232555) | Cod sursa (job #2914513) | Cod sursa (job #700539) | Cod sursa (job #1704387)
import java.io.*;
import java.util.*;
class Main {
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();
}
}