Pagini recente » Cod sursa (job #149283) | Cod sursa (job #2407108) | Cod sursa (job #2301092) | Cod sursa (job #2447394) | Cod sursa (job #1705765)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
class Main {
static int numEdges;
static int numNodes;
static int source;
public static void bfs(ArrayList<ArrayList<Integer>> edge,int source){
try {
BufferedWriter bufferedOut = new BufferedWriter( new FileWriter("bfs.out"));
PrintWriter out = new PrintWriter(bufferedOut);
ArrayList<Integer> result = new ArrayList <Integer>();
for (int i=0;i<numNodes;i++){
result.add(-1);
}
int[] isVisited = new int[numNodes];
for (int i=0;i<numNodes;i++)
isVisited[i] = 0;
Queue<Integer> q = new LinkedList<Integer>();
q.add(source);
isVisited[source] = 0;
result.set(source, 0);
while(!q.isEmpty()){
int n = q.peek();
ArrayList<Integer> neighbour = edge.get(n);
for (Integer e : neighbour){
if (isVisited[e]!=1){
isVisited[e] = 1;
q.add(e);
//System.out.println(e.end);
//System.out.println(result);
if (e != source)
result.set(e,result.get(n) + 1);
}
}
q.poll();
}
for (int i = 0 ; i < result.size() ; i++){
out.print(result.get(i)+" "); //scrierea in fisier
//System.out.print(result.get(i)+" ");
}
out.close();
bufferedOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader in = null;
ArrayList<ArrayList<Integer>> edges = new ArrayList<ArrayList<Integer>>(); //lista muchiilor pe care trebuie sa o pastram nesortata pt a putea face rost de muchiile alternative
try {
in = new BufferedReader(new FileReader("bfs.in"));
String[] aux = in.readLine().split(" ");
numNodes = Integer.parseInt(aux[0]);
numEdges = Integer.parseInt(aux[1]);
source = Integer.parseInt(aux[2])-1;
for (int i=0;i<numEdges;i++)
edges.add(new ArrayList<Integer>());
for (int i = 0 ; i < numEdges ; i++){
aux = in.readLine().split(" ");
int s = Integer.parseInt(aux[0])-1;
int e = Integer.parseInt(aux[1])-1;
edges.get(s).add(e);
}
bfs(edges,source); //aplicam algoritmii de mai sus si memoram rezultatele intr-o lista
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
}
}
}