Pagini recente » Cod sursa (job #2259687) | Cod sursa (job #3157865) | Cod sursa (job #1681322) | Cod sursa (job #2050547) | Cod sursa (job #2675476)
import java.io.*;
import java.util.*;
public class Main {
private static final String INPUT_FILE_PATH = "bfs.in";
private static final String OUTPUT_FILE_PATH = "bfs.out";
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new FileReader(INPUT_FILE_PATH));
PrintWriter out = new PrintWriter(OUTPUT_FILE_PATH);
int n = in.nextInt();
int m = in.nextInt();
int root = in.nextInt();
DirectedGraph mGraph = new DirectedGraph(n);
while (m-- > 0) {
int source = in.nextInt();
int dest = in.nextInt();
mGraph.addEdge(source, dest);
}
int[] dist = mGraph.getDistancesFrom(root);
for (int i = 1; i <= n; ++i) {
out.print(dist[i] + " ");
}
out.flush();
in.close();
out.close();
}
static class DirectedGraph {
private static final int UNREACHABLE_NODE = -1;
private List<List<Integer>> adjList = new ArrayList<>();
private int cntNodes;
public DirectedGraph(int n) {
this.cntNodes = n;
for (int i = 0; i <= n; ++i) {
this.adjList.add(new ArrayList<>());
}
}
public void addEdge(int source, int dest) {
this.adjList.get(source).add(dest);
}
public int[] getDistancesFrom(int root) {
int[] dist = new int[this.cntNodes + 1];
Arrays.fill(dist, UNREACHABLE_NODE);
dist[root] = 0;
Queue<Integer> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int currNode = queue.poll();
List<Integer> relatedNodes = this.adjList.get(currNode);
if (relatedNodes != null) {
for (int i = 0; i < relatedNodes.size(); ++i) {
int related = relatedNodes.get(i);
if (dist[related] == UNREACHABLE_NODE) {
dist[related] = dist[currNode] + 1;
queue.add(related);
}
}
}
}
return dist;
}
}
}