Ho un oggetto linea e ogni oggetto linea ha una serie di attività ad esso associate. Ogni attività ha un'ora di inizio e un'ora di fine. Ogni attività ha anche un elenco di attività che sono i suoi predecessori.
Quindi, se tutte le attività fossero indipendenti (nessun predecessore), calcolerei solo l'ora di fine dell'ultima attività su ciascuna riga che sarebbe l'ora di fine di questa linea. Il tempo impiegato dalla produzione sarebbe il massimo dell'ora di fine di tutte le linee.
Il problema è che un'attività può dipendere da un'attività (che potrebbe essere sulla stessa o su una linea diversa). Pertanto, se il predecessore di un'attività si trova sulla linea diversa e l'ora di avvio è maggiore dell'ora di inizio dell'attività, l'ora di inizio dell'attività di questa attività deve essere aggiornata di conseguenza.
Come posso calcolare il tempo di produzione corretto in base a questi compiti predecessori su linee diverse?
Modifica Questo è quello che ho inventato finora.
Cluster{
func* func[n]
};
func{
int executiontime;
int starttime;
int endtime;
func* pred[k]
};
int main{
/Cluster objects were initialized up somewhere.
Cluster cl[4];//An array of four clusters
for(int i=0;i<4;i++){
cl[i].func[0].starttime = 0;
cl[i].func[0].endtime = cl[i].func[0].starttime + cl[i].func[0].executiontime;
for(int j=1;j<n;j++){
cl[i].func[j].starttime = cl[i].func[j-1].endtime;
cl[i].func[j].endtime = cl[i].func[j].starttime + cl[i].func[j].executiontime;
}
}
int productiontime=Max(cl[0].func[n].endtime,cl[1].func[n].endtime,cl[2].func[n].endtime,cl[3].func[n].endtime);
return productiontime;
}
Questo è quello che ho fatto finora. Sono bloccato su come modificare il codice per tenere conto dei predecessori dell'attività.
EDIT : dopo il ciclo precedente, aggiornerei le ore di inizio e di fine di ogni attività il cui predecessore si trova su un'altra riga. Se l'ora di inizio dell'attività del predecessore è maggiore dell'ora di inizio di questa attività, entrambi gli orari di inizio e fine di questa attività saranno entrambi aggiornati.Come fare questo quando il problema è che l'ora di inizio dell'attività di un predecessore potrebbe dover essere aggiornata a seconda delle attività predecessore.