#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct {
int begin;
int end;
int flag;//标记是否被安排
}active;
int main()
{
int num;//活动数量;
active act[N];
printf("请输入活动数量");
scanf("%d",&num);
printf("请输入活动的开始时间");
for(int i=0;i<num;i++)
{
scanf("%d",&act[i].begin);
}
printf("请输入活动的结束时间");
for(int j=0;j<num;j++)
{
scanf("%d",&act[j].end);
}
sort(act,num);
greedy(act,num);
}
void greedy(active a[],int num)
{
int current=0;//当前活动下标
for(int i=0;i<num;i++)
{
a[i].flag = 0;//初始所有活动都未被安排
}
a[0].flag = 1;//排序后的第一个活动被安排
/**
//后面的活动开始的时间晚于当前活动开始的时间则相容
//而当前活动初始下标为0,故后面的活动i下标要从1开始
**/
for(int i=1;i<num;i++)
{
if(a[i].begin >= a[current].end)
{
a[i].flag = 1;//相容,做标记
current=i;//当前活动变为i
}
}
//输出
printf("\n\n");
printf("按结束时间排序后的活动序号中,以下活动将被安排:\n\n");
int count=0;
for(int i=0;i<num;i++)
{
if(a[i].flag==1){
count++;//被安排的活动数量;
printf("活动%d :开始时间 结束时间:%d,%d\n",i,a[i].begin,a[i].end);
printf("\n");
}
}
printf("总计%d个活动被安排\n",count);
}
//按照结束时间非降序排序
void sort(active a[],int n)
{
for (int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(a[j].end>a[j+1].end){
active temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
运行结果: