c++贪心法解决会议室活动安排问题,写出相关的算法思路和代码
时间: 2024-03-20 21:43:27 浏览: 78
算法思路:
1. 定义结构体 Activity,包含开始和结束时间的属性;
2. 将所有的活动按照结束时间从小到大排序;
3. 选择第一个活动,将其加入已安排的活动列表中;
4. 依次遍历剩余的活动,如果该活动的开始时间晚于或等于已安排的活动列表中最后一个活动的结束时间,则将该活动加入已安排的活动列表中;
5. 重复步骤4,直到所有的活动都被安排。
C++代码如下:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Activity {
int start;
int end;
};
bool cmp(Activity a, Activity b) {
return a.end < b.end;
}
vector<Activity> scheduleActivities(vector<Activity>& activities) {
vector<Activity> result;
if (activities.empty()) {
return result;
}
sort(activities.begin(), activities.end(), cmp);
result.push_back(activities[0]);
for (int i = 1; i < activities.size(); i++) {
if (activities[i].start >= result.back().end) {
result.push_back(activities[i]);
}
}
return result;
}
int main() {
vector<Activity> activities = {{1, 3}, {2, 4}, {3, 5}, {4, 6}, {5, 7}, {6, 8}};
vector<Activity> result = scheduleActivities(activities);
for (int i = 0; i < result.size(); i++) {
cout << "[" << result[i].start << ", " << result[i].end << "]" << endl;
}
return 0;
}
```
以上代码中,cmp函数用于将活动按照结束时间从小到大排序,scheduleActivities函数用于解决活动安排问题,返回一个已经安排好的活动列表。在主函数中,我们将一组活动作为输入,运行scheduleActivities函数,并输出已经安排好的活动列表。
阅读全文