1.实验要求
用贪心策略设计并实现一个贪心算法,求解活动安排问题。
2.算法基本思想
在满足条件的活动中,选择结束之间最早的。
3.主要数据结构及其作用
一维数组:存储数据
4.测试用例
5.实验结果截图
测试用例1
测试用例2
测试用例3
6.代码实现
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct{
int start;
int finish;
int index;
}action;
//根据活动结束时间进行非降序排序
void sort_action(action a[],int n)
{ int i,j;
action temp;
for(i=1;i<=n;i++)
for(j=1;j<=n-i;j++)
{
if(a[j].finish>a[j+1].finish)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
int main()
{
int n;
cout<<"请输入总的活动个数:";
cin>>n;
action a[n+1];
cout<<"请输入每个活动的开始和结束时间:";
for(int i=1;i<=n;i++){
cin>>a[i].start>>a[i].finish;
a[i].index=i;
}
sort_action(a,n);
bool b[n+1];
int num=1;
b[1]=true;
int pretime=a[1].finish;
for(int i=2;i<=n;i++){
if(a[i].start >= pretime){
b[i]=true;
num++;//a[i]活动安排上
pretime=a[i].finish;//更新pretime
}else{
b[i]=false;
}
}
cout<<"最多能够举办的活动个数:"<<num<<endl;
cout<<"能举办的活动序号:";
for(int i=1;i<=n;i++){
if(b[i]) cout<<a[i].index<<" ";
}
return 0;
}