C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...

贪心算法解决会场安排问题多处最优服务次序问题(含源代码)

西 安年月日…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si

由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。

算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。

1.会场安排问题源代码

#include

#include

#include

using namespace std;

struct point

{

int t;

bool f;

};

bool cmp(point x,point y)

{

return x.t

}

int greedy(vector x)

{

int max=0,cur=0,n=x.size();

sort(x.begin(),x.end(),cmp);

for(int i=0;i

{

if(x[i].f)

cur++;

else

cur--;

if(cur>max)

max=cur;

}

return max;

}

int main()

{

vector x;

int n,i;

point temp;

while(cin>>n,n)

{

for(i=0;i

{

temp.f=true;

cin>>temp.t;

x.push_back(temp);

temp.f=false;

cin>>temp.t;

x.push_back(temp);

}

cout<

x.clear();

}

return 0;

}

2. 多处最优服务次序问题源代码:

#include

#include

main()

{

int **window,*timewindow,*array,num,serve,i,j,k,temp;

double min;

printf("请输入等待服务人数\n");

scanf("%d",&num);

printf("请输入服务窗口数\n");

scanf("%d",&serve);

array = (int *)malloc((num + 1) * sizeof(int));

timewindow = (int *)malloc((serve + 1) * sizeof(int));

window = (int **)malloc((serve + 1) * sizeof(int *));

for(i = 0; i <= serve;i++)

window[i] = (int *)malloc((num + 1) * sizeof(int *));

printf("请依次输入服务等待时间\n");

for(i = 1; i <= num;i++)

scanf("%d",&array[i]);

for(i = 0; i <= serve;i++)

{

timewindow[i] = 0;

for(j = 0; j <= num; j++)

windo

你可能感兴趣的:(C语言会场安排问题贪心算法)