有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室?
1 #include <stdio.h> 2 #include <string.h> 3 struct Activity 4 { 5 int stime; 6 int ftime; 7 }; 8 typedef struct Activity struAcvity; 9 void sort(struAcvity a[],int n); 10 int getClass(struAcvity a[],int n); 11 int main() 12 { 13 int n,i,k; 14 scanf("%d",&n); 15 struAcvity a[n]; 16 for(i=0;i<n;i++) 17 scanf("%d %d",&a[i].stime,&a[i].ftime); 18 sort(a,n); 19 k=getClass(a,n); 20 printf("%d",k); 21 return 0; 22 } 23 void sort(struAcvity a[],int n) 24 { 25 int minSindex; 26 int i,j; 27 struAcvity temp; 28 for(i=0;i<n-1;i++) 29 { 30 minSindex=i; 31 for(j=i+1;j<n;j++) 32 if(a[j].stime<a[minSindex].stime) 33 minSindex=j; 34 if(minSindex!=i) 35 { 36 temp=a[minSindex]; 37 a[minSindex]=a[i]; 38 a[i]=temp; 39 } 40 } 41 } 42 int getClass(struAcvity a[],int n) 43 { 44 int class[n],i,j,N=0; 45 int flag; 46 class[0]=a[0].ftime; 47 for(i=1;i<n;i++) 48 { 49 flag=0; 50 for(j=0;j<=N;j++) 51 { 52 if(a[i].stime>class[j]||a[i].stime==class[j]) 53 { 54 class[j]=a[i].ftime; 55 flag=1; 56 break; 57 } 58 } 59 if(flag==0) 60 { 61 N++; 62 class[N]=a[i].ftime; 63 } 64 } 65 return N+1; 66 }
原文:http://www.cnblogs.com/jianf/p/6250544.html