活动安排问题,使用贪心算法用c++实现
时间: 2024-04-14 11:19:24 浏览: 82
利用贪心算法编程实现活动安排问题.txt
假设你有一些活动需要安排,每个活动都有一个开始时间和结束时间。你需要从这些活动中选择一些活动来安排,使得每个时间段内都只有一个活动在进行。请问,你最多可以安排多少个活动?
这是一个经典的贪心算法问题,我们可以按照结束时间从小到大排序,然后依次选择结束时间最早的活动,直到所有活动都被安排。
下面是使用 C++ 实现的贪心算法代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Activity {
int start, end;
};
bool cmp(Activity a, Activity b) {
return a.end < b.end;
}
int maxActivities(vector<Activity>& activities) {
// 按结束时间从小到大排序
sort(activities.begin(), activities.end(), cmp);
int count = 1;
int end = activities[0].end;
for (int i = 1; i < activities.size(); i++) {
// 如果下一个活动的开始时间大于等于上一个活动的结束时间,就可以安排这个活动
if (activities[i].start >= end) {
count++;
end = activities[i].end;
}
}
return count;
}
int main() {
vector<Activity> activities = {{1, 3}, {2, 5}, {3, 7}, {4, 8}, {5, 9}, {6, 10}, {8, 11}};
cout << maxActivities(activities) << endl; // 输出 4
return 0;
}
```
上面的代码中,我们定义了一个结构体 `Activity` 来表示活动的开始时间和结束时间。然后我们定义了一个自定义比较函数 `cmp`,用来按照结束时间从小到大排序。接着我们定义了一个函数 `maxActivities` 来计算最多可以安排多少个活动。
在 `maxActivities` 函数中,我们首先对活动按照结束时间从小到大排序。然后从第一个活动开始,依次判断下一个活动的开始时间是否大于等于上一个活动的结束时间,如果是,就可以安排这个活动,并更新当前的结束时间 `end`。最后返回安排的活动数量即可。
最后在 `main` 函数中,我们定义了一些活动,然后调用 `maxActivities` 函数来计算最多可以安排多少个活动,输出结果为 4。
阅读全文