完整程序:
#include<bits/stdc++.h>
using namespace std;
//计算活动安排问题的贪心算法
struct action{
int s; //起始时间
int f; //结束时间
int index; //活动的编号
};
bool cmp(const action &a, const action &b)//按活动的结束时间升序排序
{
if (a.f<=b.f) return true;
return false;
}
//形参数组b用来记录被选中的活动
void GreedySelector(int n, action a[], bool b[])
{
b[1] = true;//第1个活动是必选的
//记录最近一次加入到集合b中的活动
int preEnd=1;
for(int i=2;i<=n;i++)
if(a[i].s>=a[preEnd].f)
{
b[i]=true;
preEnd=i;
}
}
int main(){
action a[1000];
bool b[1000];
cout<<"请输入活动的数量"<<endl;
int n;
cin>>n;
cout<<"请依次输入活动的开始时间和结束时间:"<<endl;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f;
}
for(int i=1;i<=n;i++){
a[i].index=i;//记录活动的初始编号
}
sort(a,a+n+1,cmp);
GreedySelector(n,a,b);
cout<<"选中的活动编号依次为:"<<endl;
for(int i=1;i<=n;i++){
if(b[i])
cout<<a[i].index<<" ";
}
}