用C语言写一个实现活动安排问题贪心算法
时间: 2024-12-16 14:25:18 浏览: 107
在C语言中,我们可以使用贪心算法解决一些活动安排问题,比如经典的“活动选择”问题(Activity Selection Problem)。这个问题是给定一系列非重叠的时间段,找出可以参加的最大数量的活动。这里提供一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义时间段结构体
typedef struct {
int start; // 开始时间
int end; // 结束时间
} Activity;
// 比较两个活动开始时间是否在同一时刻
int compare(const void *a, const void *b) {
return ((Activity *)a)->start - ((Activity *)b)->start;
}
// 贪心选择活动
int greedy_activity_selection(Activity activities[], int n) {
// 对活动按开始时间排序
qsort(activities, n, sizeof(Activity), compare);
int count = 0;
Activity current = {activities[0].start, 0}; // 当前选中的活动
for (int i = 1; i < n; i++) {
if (activities[i].end <= current.end) {
// 如果新活动结束早于当前活动,覆盖当前活动
current.end = activities[i].end;
} else {
// 否则更新当前活动并计数
count++;
current.start = activities[i].start;
}
}
// 最后一个活动也计入结果
count++;
return count;
}
int main() {
int n;
printf("请输入活动的数量: ");
scanf("%d", &n);
Activity* activities = malloc(n * sizeof(Activity));
for (int i = 0; i < n; i++) {
printf("请输入第 %d 个活动的开始时间和结束时间: ", i + 1);
scanf("%d %d", &activities[i].start, &activities[i].end);
}
int max_activities = greedy_activity_selection(activities, n);
printf("可以参加的最大活动数为: %d\n", max_activities);
free(activities); // 释放内存
return 0;
}
```
这个程序首先读入活动数量和每个活动的具体时间,然后按照开始时间对活动排序。接着,它遍历每个活动,如果新活动不会影响已选活动,则保留新活动;否则,结束当前活动并继续寻找下一个。最后返回最大可以参与的活动数。
阅读全文
相关推荐


















