
如何使用C++中的活动选择算法
活动选择算法(Activity Selection Algorithm)是一种经典的贪心算法,用于解决活动安排问题。在给定一组活动的起始时间和结束时间的情况下,算法的目标是选择出最大的相容活动集合,即这些活动互不冲突且可以同时进行的最大数量的活动。本文将介绍如何使用C++实现活动选择算法,并附上具体的代码示例。
算法思路:
活动选择算法的基本思路是,首先根据活动的结束时间对活动进行排序。然后依次选择结束时间最早的活动,同时排除与该活动冲突的其他活动。具体的步骤如下:
立即学习“C++免费学习笔记(深入)”;
- 首先,需要定义一个结构体来表示每个活动。结构体中包含活动的起始时间和结束时间。
struct Activity
{
int start;
int end;
};- 然后,定义一个函数来实现活动选择算法。函数的输入是一个活动数组和数组的大小,输出是一个最大相容活动集合。
vectoractivitySelection(Activity arr[], int n) { // 根据结束时间对活动进行排序 sort(arr, arr + n, [](Activity a, Activity b) { return a.end < b.end; }); vector selectedActivities; selectedActivities.push_back(arr[0]); //选择第一个活动 int lastSelected = 0; //遍历剩余的活动 for (int i = 1; i < n; i++) { if (arr[i].start >= arr[lastSelected].end) { selectedActivities.push_back(arr[i]); lastSelected = i; } } return selectedActivities; }
- 最后,在main函数中构造一个活动数组并调用活动选择函数,打印输出最大相容活动集合。
int main()
{
Activity arr[] = {{1, 2}, {3, 4}, {0, 6}, {5, 7}, {8, 9}, {5, 9}};
int n = sizeof(arr) / sizeof(arr[0]);
vector selectedActivities = activitySelection(arr, n);
cout << "最大相容活动集合:" << endl;
for (int i = 0; i < selectedActivities.size(); i++)
{
cout << "(" << selectedActivities[i].start << ", " << selectedActivities[i].end << ")" << endl;
}
return 0;
} 代码示例解析:
首先,在定义的结构体中,将每个活动的起始时间(start)和结束时间(end)作为结构体的成员。
然后,在实现的活动选择函数中,首先根据活动的结束时间对活动数组进行排序,以便后续选择活动时可以方便地按照结束时间的顺序。
无错试用版,保留了所以商城的基本功能,商品数量限制80件2005V-C更新:更新所有订单功能及一些相应的错误,在线支付加上邮费功能支持在线支付八家银行等接口和可以选择商品图文排列功能,可以后台自由设置,银行接口列表如下:动感在线支付支付宝 网银在线 NPS支付 西部支付 1st-pay在线支付平台 首信易支付 易付通 中国在线支付 环讯IPS支付 不使用在线支付默认管理员帐号:admin密码:ad
接着,定义一个vector容器 selectedActivities 来保存最大相容活动集合,并将第一个活动加入其中。
然后,从第二个活动开始遍历剩余的活动。如果当前活动的起始时间大于等于已选择的最后一个活动的结束时间,则将该活动加入到最大相容活动集合中,并将该活动设为当前已选择的最后一个活动。
最后,在main函数中创建一个活动数组,调用活动选择函数,并打印输出最大相容活动集合。
总结:
通过以上的示例代码,我们可以看到C++中如何实现活动选择算法。通过贪心策略,根据活动的结束时间来选择最大的相容活动集合。活动选择算法在实际生活中有广泛的应用,比如会议安排、项目管理等。
【参考文献】
[1] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd edition). MIT Press.










