package teste; import org.paukov.combinatorics.Factory; import org.paukov.combinatorics.Generator; import org.paukov.combinatorics.ICombinatoricsVector; import java.util.*; public class Tester { public Trip makeTrip(Location start, Location end) { Trip trip = new Trip(); trip.setStart(start); trip.setEnd(end); return trip; } public static void main(String[] args) { Tester tester = new Tester(); ArrayList locations = new ArrayList<>(); locations.add(new Location("A", "A")); locations.add(new Location("B", "B")); locations.add(new Location("C", "C")); locations.add(new Location("D", "D")); locations.add(new Location("E", "E")); locations.add(new Location("F", "F")); locations.add(new Location("G", "G")); locations.add(new Location("H", "H")); locations.add(new Location("I", "I")); locations.add(new Location("J", "J")); locations.add(new Location("K", "K")); locations.add(new Location("L", "L")); locations.add(new Location("M", "M")); locations.add(new Location("N", "N")); locations.add(new Location("O", "O")); locations.add(new Location("P", "P")); locations.add(new Location("Q", "Q")); locations.add(new Location("R", "R")); locations.add(new Location("S", "S")); locations.add(new Location("T", "T")); int i = 0; Random random = new Random(); ArrayList trips = new ArrayList<>(); while (i++ < 54) { trips.add(tester.makeTrip(locations.get(random.nextInt(locations.size())), locations.get(random.nextInt(locations.size())))); } System.out.println("Trips:"); trips.forEach(System.out::println); final Location start = trips.get(random.nextInt(trips.size())).getStart(); System.out.println("\nLooking for start: " + start); System.out.println(); final Set allTrips = new HashSet<>(trips); List> possibleCombinations = new ArrayList<>(); for (int j = 0; j < trips.size(); j++) { final ICombinatoricsVector vector = Factory.createVector(allTrips); final Generator generator = Factory.createMultiCombinationGenerator(vector, j); final List> iCombinatoricsVectors; iCombinatoricsVectors = generator.generateFilteredObjects((long l, ICombinatoricsVector tripCombination) -> { final List listTrips = tripCombination.getVector(); if (listTrips.isEmpty()) return false; final Iterator iterator = listTrips.iterator(); Trip firstTrip = iterator.next(); if (!firstTrip.getStart().equals(start)) return false; Trip tripTmp = firstTrip; while (iterator.hasNext()) { final Trip trip = iterator.next(); if (!tripTmp.getEnd().equals(trip.getStart())) return false; tripTmp = trip; } return true; }); iCombinatoricsVectors.forEach(l -> possibleCombinations.add(l.getVector())); } System.out.println("Possible trips: " + possibleCombinations.size()); possibleCombinations.forEach(l -> System.out.println(Arrays.toString(l.toArray()))); } }