public List<WeightedEdge<N, Number>> findPath(IWeightedGraph<N, Number> graph, N source, N target, N current, LinkedList<WeightedEdge<N, Number>> path) {
		if(current == target) {
			return path;
		} else {
			List<WeightedEdge<N, Number>> edges = graph.edgesFrom(current);
			for(WeightedEdge<N, Number> edge : edges) {
				if(edge.weight.doubleValue() - flow.get(edge) > 0 && !path.contains(edge)) {
					path.add(edge);
					List<WeightedEdge<N, Number>> newPath = findPath(graph, source, target, edge.to, path);
					if(newPath != null) {
						return newPath;
					}
					path.remove(edge);
				}
			}
			return null;
		}
	}