Advertisement
icatalin

nr max de intervale neintersectate greedy

Apr 20th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. // Se dau N intervale inchise. Sa se determine un numar maxim de intervale care nu se intersecteaza 2 cate 2
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. struct interval
  7. {
  8.     int start, finish;
  9. };
  10.  
  11. void citire(FILE *fin,int *n, struct interval *ptr)
  12. {
  13.     fscanf(fin,"%d",&(*n));
  14.     int i;
  15.  
  16.     for (i=0; i<*n; i++)
  17.     {
  18.         fscanf(fin,"%d %d",&ptr->start,&ptr->finish);
  19.         ptr++;
  20.     }
  21.  
  22. }
  23.  
  24. void afisare(FILE *fout, int n, struct interval *ptr)
  25. {
  26.     fprintf(fout,"Vector sortat:\n");
  27.  
  28.     int i;
  29.  
  30.     fprintf(fout,"%d\n",n);
  31.  
  32.     for (i=0; i<n; i++)
  33.     {
  34.         fprintf(fout,"%d %d\n", ptr->start, ptr->finish);
  35.         ptr++;
  36.     }
  37.  
  38. }
  39.  
  40. void sortare(int n, struct interval *v) //sortare cu complexitate n^2
  41. {
  42.     int i,j;
  43.     struct interval aux;
  44.  
  45.     for (i=0; i<n; i++)
  46.         for (j=i+1; j<n; j++)
  47.             if (v[i].finish > v[j].finish)
  48.                 {
  49.                     aux = v[i];
  50.                     v[i] = v[j];
  51.                     v[j] = aux;
  52.                 }
  53.  
  54. }
  55.  
  56. int comparator(const void *s1, const void *s2) //asta e pentru quicksort
  57. {
  58.     struct interval *e1 = (struct interval *) s1;
  59.     struct interval *e2 = (struct interval *) s2;
  60.  
  61.     return e1->finish - e2->finish;
  62. }
  63.  
  64. void greedy(FILE *fout, int n, struct interval *v)
  65. {
  66.     fprintf(fout,"\n********************************************************\nRezolvare:\n");
  67.     fprintf(fout,"%d %d\n",v[0].start,v[0].finish);
  68.  
  69.     int lastTime = v[0].finish, i = 1;
  70.  
  71.     while (i < n)
  72.     {
  73.         if (v[i].start > lastTime)
  74.         {
  75.             lastTime = v[i].finish;
  76.             fprintf(fout,"%d %d\n",v[i].start,v[i].finish);
  77.         }
  78.         i++;
  79.     }
  80. }
  81.  
  82. int main()
  83. {
  84.     FILE *fin, *fout;
  85.  
  86.     fin = fopen("date.in","r");
  87.     fout = fopen("date.out","w");
  88.  
  89.     struct interval vec[100];
  90.     int n;
  91.  
  92.     citire(fin,&n,vec);
  93.     //sortare(n,vec); //are n^2, e mai proasta ca quicksort
  94.     qsort(vec,n,sizeof(struct interval),comparator);
  95.     afisare(fout,n,vec);
  96.     greedy(fout,n,vec);
  97.  
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement