活动安排问题

完整程序:

#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<<" ";
}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章