KennedyOliveira icon

Untitled

KennedyOliveira | PRO | 03/03/15 08:23:05 PM UTC | 0 ⭐ | 489 👁️ | Never ⏰ | []
Java |

3.23 KB

|

None

|

0 👍

/

0 👎

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<Location> 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<Trip> 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<Trip> allTrips = new HashSet<>(trips);
 
    List<List<Trip>> possibleCombinations = new ArrayList<>();
 
    for (int j = 0; j < trips.size(); j++)
    {
      final ICombinatoricsVector<Trip> vector = Factory.createVector(allTrips);
 
      final Generator<Trip> generator = Factory.createMultiCombinationGenerator(vector, j);
 
      final List<ICombinatoricsVector<Trip>> iCombinatoricsVectors;
 
      iCombinatoricsVectors = generator.generateFilteredObjects((long l, ICombinatoricsVector<Trip> tripCombination) -> {
        final List<Trip> listTrips = tripCombination.getVector();
 
        if (listTrips.isEmpty()) return false;
 
        final Iterator<Trip> 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())));
  }
}

Comments