#include<stdio.h>
void greedy(int s[],int f[],int a[],int k);
int main()
{
int s[] = {1,3,0,5,3,5,6,8,8,2,12};
int f[] = {4,5,6,7,8,9,10,11,12,13,14};
int k;
k = sizeof(f)/sizeof(f[0]);
int *a;
a = (int*)malloc(sizeof(int)*k);
greedy(s,f,a,k);
system("PAUSE");
}
/*
* s[]:活動的開始時間
* f[]:活動的結束時間(非降序排列)
* a[]:0或者1,爲0表示活動不被安排,1表示活動被安排
* k:活動個數
*/
void greedy(int s[],int f[],int a[],int k)
{
int i;
int j = 0;
for(i=0;i<k;i++)
{
a[i] = 0;//初始所有活動都未被安排
}
a[0] = 1;
printf("第1個活動被安排\n");
int count = 1;
for(i=1;i<k;i++)
{
if(s[i] > f[j])
{
a[i] = 1;
printf("開始%d,結束%d.",s[i],f[i]);
j = i;
count++;
printf("第%d個活動被安排\n",i+1);
}
}
printf("總計%d個活動被安排\n",count);
}
對於活動安排問題,貪心算法總是能求得整體的最優解。