设有n个活动的集合E={1,2,3,…,n},所有的活动要求使用同一资源,而在同一时间内只有一个活动能使用这一资源,每个活动都有使用这一资源的开始时间si和结束时间fi,且si<fi。目标:要在所给的活动中,找出最大的相容的活动子集合。
用贪心算法求解。
#include <stdio.h>
int main()
{
int n;
int *start, *end, *exists;
int i,j,k;
printf("input the number of activities:");
scanf("%d",&n);
start=new int [n];
end=new int [n];
exists=new int [n];
for(i=0;i<n;i++)
exists[i]=0;
printf("input the start time of the activity:");
for(i=0;i<n;i++)
scanf("%d",start+i);
printf("input the end time of the activity:");
for(i=0;i<n;i++)
scanf("%d",end+i);
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(end[i]>end[j])
{
k=start[i];start[i]=start[j]; start[j]=k;
k=end[i];end[i]=end[j]; end[j]=k;
}
}
}
j=0;
exists[j]=1;
for(i=1;i<n;i++)
{
if(start[i]>=end[j])
{
exists[i]=1;
j=i;
}
}
for(i=0;i<n;i++)
{
if(exists[i])
printf("%d ",i);
}
putchar('\n');
return 0;
}