Cod sursa(job #1704888)

Utilizator Marian25Stanciulica Marian Marian25 Data 19 mai 2016 15:43:23
Problema BFS - Parcurgere in latime Scor 20
Compilator java Status done
Runda Arhiva educationala Marime 2.22 kb
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();
			}
		}
	}

}