Permutationen

Aus MimiPedia
public class Perm<T> {

	public Consumer<List<T>> verbraucher;

	void laufe(List<T> p, Set<T> rSet) {
		if (rSet.isEmpty()) {
			verbraucher.accept(p);
		}

		for (T r : rSet) {
			laufe(add(p, r), ohne(rSet, r));
		}
	}

	private List<T> add(List<T> p, T r) {
		if (p == null) {
			return List.of(r);
		}
		var copy = new ArrayList<T>();
		copy.addAll(p);
		copy.add(r);
		return copy;
	}

	private Set<T> ohne(Set<T> rSet, T r) {
		var copy = new HashSet<T>();
		copy.addAll(rSet);
		copy.remove(r);
		return copy;
	}
}