nel tuo codice ci sono svariati errori
codice:
public void dfs(Graph g, int source, int max, List<Edge5R> e_visited, 
		List<Integer> v_visited, Set<Integer> ris, int cont)
{
	v_visited.add(source);
	if(cont <= max)
	{
		if(!ris.contains(source))
		{
			ris.add(source);
		}
	
	       for(Edge5R edge : Graph.outEdges(source))
	       {
		   if(!e_visited.contains(edge))
		   {
			Integer w = edge.getDestination();
			
			if(!v_visited.contains(w))
			{
				e_visited.add(edge);
				dfs(g,w,max,e_visited,v_visited,ris,cont++);
			}
		}
	      }
        }
}
intanto il for lo puoi mettere direttamente dentro l'if perchè una volta raggiunto il massimo cammino è inutile controllare altri cammini.

Inoltre supponiamo che te chiami questa sequenza all'inizio
1,2,3,4 di lunghezza 4 te aggiungi i nodi 1,2,3,4 alla tua lista
ma se fosse possibile fare 1,4 nonostante 4 sia gia dentro la lista bisognerebbe andare avanti quindi non mi torna questa parte
codice:
if(!v_visited.contains(w))
{
	e_visited.add(edge);
	dfs(g,w,max,e_visited,v_visited,ris,cont++);
}
dovresti fare una cosa più complessa ad esempio dovresti avere una coppia (4,4) ovvero il nodo 4 l'ho visitato al passo 4 se trovo quel nodo con un numero di passi minore rifai la chiamata ricorsiva (4,2) il nodo 4 lo trovo anche al passo 2 visto che avevo (4,4) esegui la chiamata ugualmente e aggiorno (4,4) con (4,2)