Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct interval
- {
- int id, time, deadline;
- };
- void citire(FILE *fin,int *n, struct interval *ptr)
- {
- fscanf(fin,"%d",&(*n));
- int i;
- for (i=0; i<*n; i++)
- {
- fscanf(fin,"%d %d",&ptr->time,&ptr->deadline);
- ptr->id = i + 1;
- ptr++;
- }
- }
- void afisare(FILE *fout, int n, struct interval *ptr)
- {
- fprintf(fout,"Vector sortat crescator dupa deadline:\n");
- int i;
- fprintf(fout,"%d\n",n);
- for (i=0; i<n; i++)
- {
- fprintf(fout,"id %d: %d %d \n", ptr->id, ptr->time, ptr->deadline);
- ptr++;
- }
- }
- void sortare(int n, struct interval *v) //sortare cu complexitate n^2
- {
- int i,j;
- struct interval aux;
- for (i=0; i<n; i++)
- for (j=i+1; j<n; j++)
- if (v[i].deadline > v[j].deadline)
- {
- aux = v[i];
- v[i] = v[j];
- v[j] = aux;
- }
- }
- int comparator(const void *s1, const void *s2) //asta e pentru quicksort
- {
- struct interval *e1 = (struct interval *) s1;
- struct interval *e2 = (struct interval *) s2;
- //return e1->deadline - e2->deadline;
- if (e1->deadline > e2->deadline)
- return 1;
- else if (e1->deadline < e2->deadline)
- return -1;
- else
- return e1->time - e2->time;
- return 0;
- }
- void greedy(FILE *fout, int n, struct interval *v)
- {
- fprintf(fout,"\n********************************************************\nRezolvare:\n");
- int i, lb = 0, hb, delay;
- for (i=0; i<n; i++)
- {
- hb = lb + v[i].time;
- fprintf(fout,"activitatea %d in intervalul [%d,%d) - intarziere %d\n",v[i].id, lb, hb, hb - v[i].deadline);
- lb = lb + v[i].time;
- }
- }
- int main()
- {
- FILE *fin, *fout;
- fin = fopen("date.in","r");
- fout = fopen("date.out","w");
- struct interval vec[100];
- int n;
- citire(fin,&n,vec);
- qsort(vec,n,sizeof(struct interval),comparator);
- afisare(fout,n,vec);
- greedy(fout,n,vec);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment