36 lines
1.4 KiB
C
36 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
int greedySelector(int s[], int f[], bool a[], int n) {
|
|
a[0] = true; // 安排第一个活动,标记为true
|
|
int j = 0; // 上一个被安排的活动的索引
|
|
int count = 1; // 已安排活动的个数
|
|
for (int i = 1; i < n; i++) {
|
|
// 检验当前最早结束的活动的开始时间是否晚于前一个活动的结束时间
|
|
if (s[i] >= f[j]) {
|
|
a[i] = true; // 标记活动为已安排
|
|
j = i; // 更新上一个活动的索引
|
|
count++; // 记已安排活动的个数
|
|
} else {
|
|
a[i] = false; // 标记活动为未安排
|
|
}
|
|
}
|
|
return count; // 返回已安排活动的个数
|
|
}
|
|
int main() {
|
|
// 初始化数据s数组记录活动开始时间;f数组记录活动结束时间
|
|
int s[] = {1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12};
|
|
int f[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
|
|
int n = sizeof(s) / sizeof(s[0]); // 计算活动的个数
|
|
bool a[n]; // boolean型数组,表示活动安排情况
|
|
int result = greedySelector(s, f, a, n);
|
|
// 输出结果
|
|
printf("选中的活动个数: %d\n", result);
|
|
for (int i = 0; i < n; i++) {
|
|
if (a[i]) {
|
|
printf("编号为:%d的活动被选中,", i + 1);
|
|
printf("其开始时间为:%d,结束时间为:%d\n", s[i], f[i]);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|