Algoritmo de búsqueda en profundidad para grafos. Parte de un nodo inicial s visita a todos sus vecinos. DFS puede ser usado para contar la cantidad de componentes conexas en un grafo y puede ser modificado para que retorne información de los nodos dependiendo del problema. Permite hallar ciclos en un grafo.
SE DEBEN LIMPIAR LAS ESTRUCTURAS DE DATOS ANTES DE UTILIZARSE

static int v, e; //vertices, arcos
static int MAX=100005; //Cantidad máxima de nodos del grafo
static ArrayList<Integer> ady[] = new ArrayList[MAX]; //Lista de adyacencia
static boolean marked[] = new boolean[MAX]; //Estructura auxiliar para marcar los grafos visitados

//Recibe el nodo inicial s
static void dfs( int s ){
	marked[s] = true;
	int i, next;

	for( i = 0; i < ady[s].size(); i++){
		next = ady[s].get(i);
		if( !marked[next] ){
			dfs(next);
		}
	}
}

@@ -370,42 +370,8 @@
 SE%0A%0A
-static int v, e; //vertices, arcos
 %0Asta
@@ -798,8 +798,268 @@
 %09%7D%0A%09%7D%0A%7D%0A
+%0Apublic static void main(String%5B%5D args) %7B%0A%0A%0A            for (int i = 0; i %3C MAX; i++) %7B%09//inicializa la lista de adyacencia y el arreglo de marcados.%0A                ady%5Bi%5D = new ArrayList%3CInteger%3E();%0A                marked%5Bi%5D = false;%0A            %7D%0A%09    %0A%0A%7D%0A%0A

Update DFS.java