Witam,
mam dosyć spory problem z implementacją algorytmu Liu dla szeregowania zadań zależnych. Udało mi się stworzyć implementacje tego algorytmu dla zadań niezależnych, jednakże nie bardzo wiem jak te zadania "poukładać" aby były od siebie zależne. Oczywiście wiem, że należy stworzyć graf i jakoś te zadania uzależnić. Czy mógłby ktoś coś poradzić? Zamieszczam kod, który stworzyłem na ten moment.

public class Task implements Comparable<Task> {
	private String taskName;
	private int taskLong;
	private int start;
	private int deadline;
	
	public Task(String taskName, int taskLong, int start, int deadline){
		this.taskLong=taskLong;
		this.start=start;
		this.deadline=deadline;
		this.taskName=taskName;
	}



	public int getTaskLong() {
		return taskLong;
	}



	public void setTaskLong(int taskLong) {
		this.taskLong = taskLong;
	}


	public int getStart() {
		return start;
	}

	public void setStart(int start) {
		this.start = start;
	}

	public int getDeadline() {
		return deadline;
	}

	public void setDeadline(int deadline) {
		this.deadline = deadline;
	}
	
	public String getTaskName() {
		return taskName;
	}



	public void setTaskName(String taskName) {
		this.taskName = taskName;
	}
	
	@Override
	public String toString() {
		return taskName + " " + taskLong+" " + start +" " + deadline;
	}



	@Override
	public int compareTo(Task o) {
		int por = taskName.compareTo(o.taskName);
		return por;
	}
	
}



public class Main {

	
	public static void main(String [] args){
		Main main=new Main();
		main.sorter();
	}
	
	private void sorter(){
		ArrayList<Task> tasks = new ArrayList<Task>();
		ArrayList<Task> newTasks = new ArrayList<Task>();
		Task z1=new Task("z1",2,0,2);
		Task z2=new Task("z2",2,0,3);
		Task z3=new Task("z3",3,1,1);
		Task z4=new Task("z4",1,2,4);
		Task z5=new Task("z5",2,3,5);
		Task z6=new Task("z6",2,3,5);
		Task z7=new Task("z7",3,3,2);
		
		tasks.add(z1);
		tasks.add(z2);
		tasks.add(z3);
		tasks.add(z4);
		tasks.add(z5);
		tasks.add(z6);
		tasks.add(z7);
		
		for(int i=0;i<tasks.size();i++){
			int taskLong=tasks.get(i).getTaskLong();
			String taskName = tasks.get(i).getTaskName();
			int taskStart=tasks.get(i).getStart();
			int taskDeadline = tasks.get(i).getDeadline();
			int temp=taskLong;
			for(int j=0;j<taskLong;j++){
				newTasks.add(new Task(taskName,temp,taskStart,taskDeadline));
				temp--;
			}
		}
		
		
		
		System.out.println("Nieposortowanie: ");
		for(int i=0;i<newTasks.size();i++){
			System.out.println(newTasks.get(i));
		}
		System.out.println("");
		
		Collections.sort(newTasks, new Sorter());
		
		
		
		System.out.println("Posortowanie wg wejscia do systemu: ");
		for(int i=0;i<newTasks.size();i++){
			System.out.println(newTasks.get(i));
		}
		
		
		Queue<Task> q = new LinkedList<Task>();
		
		
		int time=0;
		int temp=0;
		int minDeadline=Integer.MAX_VALUE;
		while(!newTasks.isEmpty()){
			//System.out.println("Ustalam while...");
			if(minDeadline<Integer.MAX_VALUE){
				minDeadline++;
			}
			for(int i=0;i<newTasks.size();i++){
				
				if(i==0 && temp==0){
					minDeadline=newTasks.get(i).getDeadline();
					q.offer(newTasks.get(i));
					System.out.println(newTasks.get(i));
					newTasks.remove(i);
					temp++;
					time++;
				}else{
				//System.out.println("Wchodzę do for...");
				if(newTasks.get(i).getStart()<=time && newTasks.get(i).getDeadline()<minDeadline){
					//System.out.println("Jestem w pierwszym ifie");
					minDeadline=newTasks.get(i).getDeadline();
					q.offer(newTasks.get(i));
					System.out.println(newTasks.get(i));
					newTasks.remove(i);

					time++;
					
				}
			}
			}
			
		}
		System.out.println("\nWykonane:");
		while(!q.isEmpty()){
			System.out.println(q.poll());
		}
		
		
	}
	
	private class Sorter implements Comparator<Task>{

		@Override
		public int compare(Task o1, Task o2) {
			int start = o1.getStart() - o2.getStart();
			if(start==0){
				int deadline = o1.getDeadline()-o2.getDeadline();
				if(deadline==0){
					return o1.compareTo(o2);
				}
				return deadline;
			}
			return start;
		}
		
	}
}