Pagini recente » Cod sursa (job #2233795) | Cod sursa (job #2302171) | Cod sursa (job #2267358) | Istoria paginii runda/cei_mai_mari_olimpicari_runda_5/clasament | Cod sursa (job #1704888)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Graph{
int V, E;
List<ArrayList<Integer>> adj = new ArrayList<>();
List<Integer> nodes = new ArrayList<>();
public Graph(int V, int E) {
this.V = V;
this.E = E;
for (int i = 0; i < V; i++) {
adj.add(new ArrayList<Integer>());
nodes.add(i);
}
}
int[] bfs(int source, boolean[] visited){
Queue<Integer> q = new LinkedList<>();
q.add(source);
visited[source] = true;
int dist[] = new int[V];
for (int i = 0; i < V; i++) {
dist[i] = -1;
}
dist[source] = 0;
int d = 0, d1 = 0;
while(!q.isEmpty()){
int node = q.poll();
d1 = d;
List<Integer> neigh = adj.get(node);
for (int i = 0; i < neigh.size(); i++) {
if(!visited[neigh.get(i)]){
d = d1;
d++;
visited[neigh.get(i)] = true;
q.add(neigh.get(i));
dist[neigh.get(i)] = d;
}
}
}
return dist;
}
}
public class Main {
public static void main(String[] args) {
BufferedReader input = null;
BufferedWriter output = null;
String[] tokens;
int E, V, S;
try {
input = new BufferedReader(new FileReader(new File("bfs.in")));
output = new BufferedWriter(new FileWriter(new File("bfs.out")));
tokens = input.readLine().split("\\s+");
V = Integer.valueOf(tokens[0]);
E = Integer.valueOf(tokens[1]);
S = Integer.valueOf(tokens[2]);
Graph g = new Graph(V, E);
for (int i = 0; i < E; i++) {
tokens = input.readLine().split("\\s+");
g.adj.get(Integer.valueOf(tokens[0])-1).add(Integer.valueOf(tokens[1])-1);
}
boolean[] visited = new boolean[V];
for (int i = 0; i < V; i++) {
visited[i] = false;
}
int[] dist = g.bfs(S-1, visited);
for (int i = 0; i < dist.length; i++) {
output.write(dist[i] + " ");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e2) {
} finally {
try {
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}