在一段时间之内安排最多的会议:
算法分析:每次选择具有最早结束时间且与已安排的会议相容的会议安排。
1.原始会议表为:
会议num | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
开始时间 | 3 | 1 | 5 | 2 | 5 | 9 | 8 | 11 | 10 | 12 |
结束时间 | 6 | 4 | 7 | 5 | 9 | 8 | 11 | 10 | 12 | 14 |
2.排序后的会议表的顺序为:
会议num | 2 | 4 | 1 | 3 | 6 | 5 | 8 | 7 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
开始时间 | 1 | 2 | 3 | 5 | 3 | 5 | 6 | 8 | 8 | 12 |
结束时间 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000+5;
struct meet{
int beg;//会议开始使劲按
int end;//会议结束时间
int num;//会议编号
bool operator<(const meet&a)//重载排序规则
const {
return end<a.end||end==a.end&&beg>a.beg;
}
}Meet[maxn];
int main()
{
int n;
int count=0;
cout<<"输入会议总数:";
cin>>n;
cout<<"输入会议开始时间和结束时间:";
for(int i=1;i<=n;i++)
{
cin>>Meet[i].beg>>Meet[i].end;
Meet[i].num=i;
}//完成输入操作
sort(Meet,Meet+n);
//处理数据
cout<<"会议安排时间如下:";
int End=Meet[1].end;
cout<<"选择第"<<Meet[1].num<<"个会议"<<endl;
for(int i=2;i<=n;i++)
{
if(End>Meet[i].beg)
continue;
cout<<"选择第"<<Meet[i].num<<"个会议"<<endl;
End=Meet[i].end;
count++;
}//输出处理
cout<<"最多安排"<<cout<<"个会议"<<endl;
return 0;
}
待完善。。。