学生有n项活动申请使用某一个会议室,每项活动都有一个开始时间和一个结束时间。任何两个活动都不能同时使用这个会议室。问如何安排这些活动,使得被安排活动的数量达到最多?
这是一道经典的贪心算法问题,即选择最优的活动安排方式使得活动数量尽可能地多。
具体实现方法为:首先将所有活动按照结束时间从早到晚排序,然后依次枚举每个活动,如果该活动的开始时间在当前已选择的活动中最晚的结束时间之后,就将该活动加入已选择集合中。最终选择的活动数量即为所求。
#include <stdlib.h>
#define N 7
struct Active {
int s; //活动开始时间
int e; //活动结束时间
int f; //选标识
}A[N];
void initA()
{
int i;
for (i = 0; i < N; i++)
A[i].e = A[i].e = A[i].f = 0;
}
void input(int n)
{
int i;
printf("请输入活动开始和结束的时间:");
for (i = 1; i <= n; i++)
{
scanf_s("%d%d", &A[i].s, &A[i].e);
}
}
void output(int n)
{
int i;
for (i = 1; i <= n; i++)
{
if (A[i].f == 1)
printf("活动: %d 开始时间:%d,结束时间:%d,flag:%d\n", i, A[i].s, A[i].e,