struct timeval differenza(struct timeval dopo,struct timeval prima) { struct timeval diff; normalizza( &prima); normalizza( &dopo); if ( dopo.tv_sec < prima.tv_sec){ diff.tv_sec = 0; diff.tv_usec = 0; } else { diff.tv_sec = dopo.tv_sec - prima.tv_sec; /* Sottraggo i secondi tra di loro */ if (dopo.tv_usec < prima.tv_usec){ if (diff.tv_sec > 0) { /* Devo scalare di uno i secondi e sottrarli ai micro secondi ossia aggiungo 1000000 all'ultima espressione */ diff.tv_sec =diff.tv_sec - 1; diff.tv_usec =(dopo.tv_usec) - prima.tv_usec + SEC_IN_MCSEC; } else{ diff.tv_usec = 0; } } else { diff.tv_usec = dopo.tv_usec - prima.tv_usec; } } return(diff); }
int minoreouguale(struct timeval *a, struct timeval *b) { normalizza(a); normalizza(b); if ( a->tv_sec < b->tv_sec ) return(1); else if ( a->tv_sec > b->tv_sec ) return(0); else if (a->tv_usec <= b->tv_usec) return(1); else return(0); }
int somma(struct timeval tmr,struct timeval ist,struct timeval *delay) { normalizza( &tmr ); normalizza( &ist ); (*delay).tv_sec = ist.tv_sec + tmr.tv_sec; (*delay).tv_usec = ist.tv_usec + tmr.tv_usec; normalizza( delay ); return(1); }
/* * MAIN */ int main(int argc, char **argv) { int temp = 0; int countercicli = 0; double tempo_esecuz, inizio; acquisisci(argc, argv); nstampa = 0; fout = fopen(OUTFILE, "w"); fprintf(fout, "**** METODO UNGHERESE **** n\nValori inseriti:\n"); stampa(); inizio = clock(); normalizza(); soluzione_iniziale_duale(); /*finch� ci sono stazioni esposte in partenza*/ while (esistono_a_esposti() != -1) { /* aggiorno soluzione duale (I J + - e delta) finch� non esistono cammini aumentanti */ while (!cammino_aumentante()) aggiorna_soluzione_duale(); /*a questo punto esiste un cammino*/ incrementa_flusso(); } tempo_esecuz = clock() - inizio; /* in CLOCKS_PER_SEC */ stampa(); fprintf(fout, "costo totale %d\nTempo di esecuzione %lf\n", costo_totale(), tempo_esecuz); fclose(fout); printf("Risultato in OUTFILE\n"); /*system("pause");*/ return 0; }