假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。
设计一个算法进行安排。
测试用例:
5(活动数目)
1 23
12 28
25 35
27 80
36 50
输出:3
#include<stdio.h>
#define n 5
int judge(int *flag){//判断活动是否已经安排完
for(int i=0;i<n;i++)//如果有一个为0,则为0,全为一则返回一
if(flag[i]==0)
return 0;
return 1;
}
int main()
{
int meet[5][2]={{1,23},{12,28},{25,35},{27,80},{36,50}};
int i,j,k;
int flag[n]={0};
int count=0;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){//冒泡排序
if(meet[i][1]>meet[j][1]){//结束时间比较,较晚的在后边
int temp=meet[i][0];
meet[i][0]=meet[j][0];
meet[j][0]=temp;
temp=meet[i][1];
meet[i][1]=meet[j][1];
meet[j][1]=temp;
}
}
}
while(judge(flag)==0){//判断活动是否已经找到会议室
count++;
i=0;
while(flag[i]==1)
i++;
flag[i]=1;
int end=meet[i][1];//结束时间
for(j=i+1;j<n;j++)//判断一个会场可以接纳那几个活动
if(flag[j]==0&&meet[j][0]>=end){
flag[j]=1;//表j活动找到会场
end=meet[j][1];
}
}
printf("所需的最少会场数为:%d\n",count);
return 0;
}