Pagini recente » Cod sursa (job #2361468) | Cod sursa (job #760568) | Cod sursa (job #757089) | Atasamentele paginii Clasament ioi2014. | Cod sursa (job #1357025)
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
class Graph {
private List<List<Integer>> adj;
Graph(List<List<Integer>> adj) {
this.adj = adj;
}
List<Integer> computeDistances(int source) {
List<Integer> distances = new ArrayList<Integer>(this.adj.size());
for (int i = 0; i < this.adj.size(); ++i) {
distances.add(Integer.MAX_VALUE);
}
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(source);
distances.set(source, 0);
while (!queue.isEmpty()) {
int node = queue.poll();
int nodeDistance = distances.get(node);
for (int i = 0; i < adj.get(node).size(); ++i) {
int sibling = adj.get(node).get(i);
int siblingDistance = distances.get(sibling);
if (1 + nodeDistance < siblingDistance) {
distances.set(sibling, 1 + nodeDistance);
queue.add(sibling);
}
}
}
for (int i = 0; i < this.adj.size(); ++i) {
if (distances.get(i) == Integer.MAX_VALUE) {
distances.set(i, -1);
}
}
return distances;
}
}
public class Main {
public static void main(String args[]) throws IOException {
InputStream inputStream = new FileInputStream("bfs.in");
Scanner scanner = new Scanner(inputStream);
OutputStream outputStream = new FileOutputStream("bfs.out");
PrintWriter writer = new PrintWriter(outputStream);
int N = scanner.nextInt();
int M = scanner.nextInt();
int S = scanner.nextInt();
List<List<Integer>> adj = new ArrayList<List<Integer>>();
for (int i = 0; i < N; ++i) {
adj.add(new ArrayList<Integer>());
}
for (int j = 0; j < M; ++j) {
int x = scanner.nextInt() - 1;
int y = scanner.nextInt() - 1;
adj.get(x).add(y);
}
Graph graph = new Graph(adj);
List<Integer> distances = graph.computeDistances(S - 1);
for (Integer distance : distances) {
writer.write(String.valueOf(distance));
writer.write(" ");
}
writer.flush();
scanner.close();
inputStream.close();
writer.close();
outputStream.close();
}
}