Cod sursa(job #1705216)

Utilizator Dum_CristianDumitra Cristian Dum_Cristian Data 20 mai 2016 02:14:54
Problema Parcurgere DFS - componente conexe Scor 0
Compilator java Status done
Runda Arhiva educationala Marime 2.55 kb
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;


 class Graph {
	
	private int numNodes;
	
	public List<List<Integer>> edges;
	
	int costuri[][];
	
	public Graph(){
		
		edges = new ArrayList<>();
	}
	
	public void insertNode(int node){
		
		edges.add(new ArrayList<>());
		
	}
	
	public void insertEdge(int fromNode, int toNode){
		
		edges.get(fromNode).add(toNode);
		
	}
	
	public int getNumNodes(){
		
		return numNodes;
		
	}
	
	public int[][] getCosts(){
		
		return costuri;
		
	} 
	
	public void readData(BufferedReader f_in) throws IOException{
		
		edges.add(new ArrayList<>());
		
		String str;
		String aux[];
		
		str = f_in.readLine();
		aux = str.split(" ");
		
		numNodes = Integer.parseInt(aux[0]);
		int numEdges = Integer.parseInt(aux[1]);
		
		int i;
		for(i = 0; i<=numNodes; i++){
			insertNode(i);
			
		}
		
		int muchie;
		
		for( muchie = 1; muchie<=numEdges; muchie++){
			
			str = f_in.readLine();
			aux = str.split(" ");
			
			int Node1 = Integer.parseInt(aux[0]);
			int Node2 = Integer.parseInt(aux[1]);
			
			insertEdge(Node1,Node2);
			insertEdge(Node2,Node1);	
		}
	}
}


	class DFS{
	
		int numNodes,i;
		int visit[] = new int[100010];
		Graph g;
		
		DFS(int numNodes, Graph g,int v[]){
			
			this.numNodes = numNodes;
			this.g = g;
			this.visit = v;
		}
	
		public void dfs(int sursa,int visit[]) throws IOException{
			
			visit[sursa] = 1;
			int nr_noduri = g.edges.get(sursa).size();
			for(i = 0; i<nr_noduri; i++){
				if(visit[g.edges.get(sursa).get(i)] == 0){
					dfs(g.edges.get(sursa).get(i),visit);
					
				}
				
			}
			
			
			
		}
}

public class Main {

	
	final static String PATH = "dfs.in";
	final static String PATH2 = "dfs.out";
	
	public static void main(String args[]) throws IOException{
		
		BufferedReader f_in = new BufferedReader(new FileReader(PATH));
		BufferedWriter f_out = new BufferedWriter(new FileWriter(PATH2));
		
		int comp_conexe = 0;
		int i;
		
		int vizitare[] = new int[100010];
		Graph g = new Graph();
		g.readData(f_in);
		DFS arbore = new DFS(g.getNumNodes(),g,vizitare);
		
		for(i = 1; i <=g.getNumNodes(); i++){
			if(vizitare[i] == 0){
				comp_conexe++; 
				arbore.dfs(i,vizitare);
				
			}
			
		}
		comp_conexe--;
		f_out.write(String.valueOf(comp_conexe));
		
		
		f_in.close();
		f_out.close();
		
		
	}
	
	
}