Pagini recente » Cod sursa (job #1341118) | Cod sursa (job #139399) | Cod sursa (job #2870034) | Cod sursa (job #54231) | Cod sursa (job #2167835)
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.BitSet;
import java.util.Queue;
import java.util.ArrayDeque;
public class Main {
private static final String INPUT_FILE_PATH = "bfs.in";
private static final String OUTPUT_FILE_PATH = "bfs.out";
static class Graph {
private int vertexNr = 0;
private List<List<Integer>> G;
public Graph(int vertexNr) {
this.vertexNr = vertexNr;
this.G = new ArrayList<>();
for (int i = 0; i <= this.vertexNr; i++)
this.G.add(new ArrayList<Integer>());
}
public void addEdge(int from, int to) {
this.G.get(from).add(to);
}
public int[] shortestDist(int startVertex) {
int[] dist = new int[vertexNr + 1];
Arrays.fill(dist, -1);
BitSet mark = new BitSet(vertexNr + 1);
Queue<Integer> q = new ArrayDeque<Integer>();
/** **/
q.add(startVertex);
mark.set(startVertex);
dist[startVertex] = 0;
while (!q.isEmpty()) {
int currVertex = q.poll();
for (int i = 0; i < G.get(currVertex).size(); i++) {
int vertex = G.get(currVertex).get(i);
if (!mark.get(vertex)) {
q.add(vertex);
mark.set(vertex);
dist[vertex] = dist[currVertex] + 1;
}
}
}
return dist;
}
}
private static Graph g = null;
private static int vertexNr, startVertex;
public static void read() {
try (Scanner in = new Scanner(new FileReader(INPUT_FILE_PATH))) {
int edgeNr, x, y;
vertexNr = in.nextInt();
g = new Graph(vertexNr);
edgeNr = in.nextInt();
startVertex = in.nextInt();
for (int i = 1; i <= edgeNr; i++) {
x = in.nextInt();
y = in.nextInt();
g.addEdge(x, y);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
read();
int[] sol = g.shortestDist(startVertex);
try (PrintWriter out = new PrintWriter(OUTPUT_FILE_PATH)) {
for (int i = 1; i <= vertexNr; i++)
out.print(sol[i] + " ");
out.print("\n");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}