Pagini recente » Cod sursa (job #1318400) | Cod sursa (job #2613779) | Cod sursa (job #1529337) | Cod sursa (job #2957453) | Cod sursa (job #3350714)
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Queue;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
static ArrayList<ArrayList<Integer>> neighborList;
static int numarNoduri, targetNode;
static int[] distances;
static void ReadData() {
try {
BufferedReader br = new BufferedReader(new FileReader("bfs.in"));
StringTokenizer st = new StringTokenizer(br.readLine());
numarNoduri = Integer.parseInt(st.nextToken());
int numarMuchii = Integer.parseInt(st.nextToken());
targetNode = Integer.parseInt(st.nextToken());
neighborList = new ArrayList<>(numarNoduri + 1);
for (int i = 0; i <= numarNoduri; i++) {
neighborList.add(new ArrayList<>());
}
for (int i = 0; i < numarMuchii; i++) {
st = new StringTokenizer(br.readLine());
int nod1 = Integer.parseInt(st.nextToken());
int nod2 = Integer.parseInt(st.nextToken());
neighborList.get(nod1).add(nod2);
}
br.close();
} catch (IOException e) {
throw new RuntimeException("Nu pot deschide fisierul bfs.in", e);
}
}
static void BFS() {
distances = new int[numarNoduri + 1];
Arrays.fill(distances, -1);
Queue<Integer> nodQueue = new ArrayDeque<>();
nodQueue.add(targetNode);
distances[targetNode] = 0;
while (!nodQueue.isEmpty()) {
int actualNode = nodQueue.remove();
for (int neighbor : neighborList.get(actualNode)) {
if (distances[neighbor] == -1) {
distances[neighbor] = distances[actualNode] + 1;
nodQueue.add(neighbor);
}
}
}
}
static void WriteData() {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("bfs.out"));
for (int i = 1; i <= numarNoduri; i++) {
writer.write(distances[i] + " ");
}
writer.close();
} catch (IOException e) {
throw new RuntimeException("Nu se poate scrie in fisierul bfs.out", e);
}
}
public static void main(String[] args) {
ReadData();
BFS();
WriteData();
}
}