process_times = [4, 3, 7, 2, 2]
due_times = [5, 6, 8, 8, 17]
def find_not_delayed(seq_prim, seq_prim_time):
for task in seq_prim:
if due_times[task]>=seq_prim_time:
return task
return None
queue = [(0, [])]
while queue:
print queue
bound, seq = queue.pop(0)
if len(seq)>=len(process_times):
break
seq_prim = [task for task in range(len(process_times)) if task not in seq]
seq_prim_time = sum(process_times[task] for task in seq_prim)
task = find_not_delayed(seq_prim, seq_prim_time)
if task is None:
for task in seq_prim:
queue.append((bound+seq_prim_time-due_times[task], [task]+seq))
else:
queue.append((bound, [task]+seq))
queue.sort()
print seq