Пример #1
0
  public void findMatchingCoursesWithSections(
      ArrayList<SchedulerCourse> currSectionCourses, ArrayList<SchedulerCourse> coursesToCheck) {

    // Base case - when you run out of classes to check against
    if (coursesToCheck.size() == 0) {
      if (this.containsAllClasses(currSectionCourses)) {
        this.schedules.add(currSectionCourses);
        this.filteredSchedules.add(currSectionCourses);
      }
    } else {
      // go through JUST next course to check against
      ArrayList<SchedulerCourse> tempCoursesToCheck = this.cloneSchedulerCoursList(coursesToCheck);
      SchedulerCourse course = tempCoursesToCheck.get(0);
      ArrayList<ClassSection> sections = course.getSections();
      tempCoursesToCheck.remove(0);
      boolean notAlreadyFound = true;
      // compile all sections of all current
      // built up classes for later comparison
      // compare ALL sections to current built up list
      ArrayList<ClassSection> currClassSections = new ArrayList<ClassSection>();
      for (SchedulerCourse currCourse : currSectionCourses) {
        for (ClassSection classSect : currCourse.getSections()) {
          currClassSections.add(classSect);
        }
      }

      // check for optional classes
      if (course.isOptional()) {
        notAlreadyFound = false;
        this.findMatchingCoursesWithSections(currSectionCourses, tempCoursesToCheck);
      }

      // go through each course section of JUST this course
      for (ClassSection section : sections) {

        if (!isSectionEmpty(section)) {
          if (!this.sectionsOverlapWithnewSection(currClassSections, section)) {

            ArrayList<ClassSection> newClassSections = new ArrayList<ClassSection>();
            newClassSections.add(section);
            SchedulerCourse newCourse =
                new SchedulerCourse(course.getCourseName(), newClassSections, course.isOptional());
            ArrayList<SchedulerCourse> newCourses =
                this.cloneSchedulerCoursList(currSectionCourses);
            newCourses.add(newCourse);

            this.findMatchingCoursesWithSections(newCourses, tempCoursesToCheck);
          }
        }
      }
    }
  }
Пример #2
0
  public ArrayList<ArrayList<SchedulerCourse>> permutateSchedules() {

    // reset instance variables
    this.schedules.clear();
    this.filteredSchedules.clear();
    this.nonOptionalClasses.clear();

    if (this.classes == null || this.classes.size() == 0) {
      return this.schedules;
    }

    // find NON-optional classes
    for (SchedulerCourse course : this.classes) {
      if (!course.isOptional()) {
        this.nonOptionalClasses.add(course);
      }
    }

    // fixate one course to create branches from
    SchedulerCourse course = this.classes.get(0);
    ArrayList<ClassSection> sections = course.getSections();

    // go through each section
    for (ClassSection section : sections) {

      if (!isSectionEmpty(section)) {

        ArrayList<ClassSection> sectionList = new ArrayList<ClassSection>();
        sectionList.add(section);
        SchedulerCourse cour =
            new SchedulerCourse(course.getCourseName(), sectionList, course.isOptional());
        ArrayList<SchedulerCourse> courses = new ArrayList<SchedulerCourse>();
        courses.add(cour);

        // deep clone classes list
        ArrayList<SchedulerCourse> coursesToCheck = this.cloneSchedulerCoursList(this.classes);

        // remove courses not to check
        int index = this.classes.indexOf(course);
        for (int i = 0; i <= index; i++) {
          coursesToCheck.remove(i);
        }
        this.findMatchingCoursesWithSections(courses, coursesToCheck);
      }
    }

    return this.schedules;
  }