public static Graph ComponentesFortementeConexas(Graph grafo) {
		DepthFirstSearch dfs = new DepthFirstSearch(grafo);
	
		/**
		 * Calcula a lista de termino
		 */
		dfs.doListaTermino(true);
		dfs.run();
		ArrayList<Integer> fechamentoGrafo = dfs.getListaTermino();
		
		//Calcula o DFS para o transposto do Grafo original
		DepthFirstSearch dfsT = new DepthFirstSearch(grafo.getGraphTransposto());
		
		int[] fechamento = new int[fechamentoGrafo.size()];
		for(int i = 0; i < fechamentoGrafo.size(); i++)
			fechamento[i] = fechamentoGrafo.get(i);
		dfsT.setDoComponentes(true); //Habilita a geração de Componentes
		dfsT.run(fechamento);

		ArrayList<ArrayList<Integer>> componentes = dfsT.getComponentes(); //Adquiri as componentes geradas
		
		//Remove as arestas que não pertencem as componentes fortemente conexas
		for (ArrayList<Integer> list:componentes) {
			for (Integer i: list) {
				for (int j = 0; j < grafo.getNlc(); j++) {
					if (!list.contains(j))
						grafo.setElement(i, j, 0);
				}
			}
		}
		return grafo;
	}