代码展示:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define Max 100//控制活动数目
int N;//所有的参演活动数目
struct Act{
int startTime;
int endTime;
}act[Max];//建立一个活动时间开始,时间结束结构体数组。
bool cmp(Act a,Act b)
{
return a.endTime<b.endTime;
}
void activitySelection()
{
int num=1,i=1;//找一个参考活动点
int countNum[]={0};
int k=0;
for(int j=2;j<=N;j++)
{
if(act[j].startTime>=act[i].endTime)//依次遍历比较,不断贪心,找到局部最优解
{
countNum[k++]=i;
i=j; //找到局部最优解,就把此时的活动作为下一次比较的参考活动点
num++; //找到了局部最优解,活动数目就要加1;

}
}
cout<<"当天活动安排最多场次为:"<<num<<"场!"<<endl;
//return num;//把所有的局部最优解都找到后,就可以合并所有最优解,即num为所有最优解的活动数目。
cout<<"活动安排标号为:";
for(int k=0;k<num;k++){
cout<<countNum[k]<<"--->";
}
cout<<"NULL"<<endl;
}

int main()
{
int k=5;//进行5次活动的安排
while(k--)
{
cout<<"请输入所有的活动数目:";
cin>>N;//活动数目
cout<<endl;
for(int i=1;i<=N;i++)
{
cout<<"请输入第"<<i<<"个活动的开始时间:";
cin>>act[i].startTime;
cout<<endl;
cout<<"请输入第"<<i<<"个活动的结束时间:";
cin>>act[i].endTime;
cout<<endl;
}
act[0].startTime=-1;
act[0].endTime=-1;
sort(act+1,act+N+1,cmp);
activitySelection();
return 0;
}
}


运行结果:

Nearth==>贪心算法-001/活动选择问题_结构体数组

(代码有错误,还在不断更新中,有好的地方就借鉴,没有的话,就靠自己吧~~)


算法在优化中,请勿打扰·····································