您的位置:首页 > 其它

活动安排问题

2014-10-31 12:50 211 查看
    设有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
;
end=new int
;
exists=new int
;

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: