public void run() { if (!checkRealizeable()) { System.out.println("Project is not realizeable, quitting"); System.exit(1); } int t = 0; ArrayList<Task> active_tasks = findTaskWithIndegreeZero(); System.out.println("---------------- Starting project from"); for (Task task : active_tasks) { System.out.println(task.toString()); task.start(t); } boolean finished = false; while (true) { ArrayList<Task> to_be_removed = new ArrayList<>(); ArrayList<Task> to_be_added = new ArrayList<>(); for (Task task : active_tasks) { if (task.isFinished(t)) { for (Edge edge : task.outEdges) { if (edge.w.tell_finished_prerequisite(t)) { to_be_added.add(edge.w); } } to_be_removed.add(task); } } active_tasks.removeAll(to_be_removed); active_tasks.addAll(to_be_added); int current_staff = 0; for (Task task : active_tasks) { current_staff += task.staff; } System.out.println("Current staff: " + Integer.toString(current_staff)); if (active_tasks.size() == 0) { for (Task task : tasks) { if (task.finished_at == -1) { System.out.println("Task " + Integer.toString(task.id) + " was not able to finish!"); } } break; } t++; System.out.println(" "); System.out.println("t: " + Integer.toString(t)); } minimum_completion_time = t; System.out.println( "*** Shortest possible execution time is " + Integer.toString(minimum_completion_time) + " ***"); setSlack(); }