c语言会场安排问题贪心算法代码并给出最优解
时间: 2024-01-18 22:03:19 浏览: 88
C语言找零钱问题贪心算法
以下是基于贪心算法的C语言会场安排代码:
```
#include <stdio.h>
// 定义一个结构体表示会议开始和结束时间
struct MeetingTime {
int start;
int end;
};
// 用于排序的比较函数
int compare(const void* a, const void* b) {
struct MeetingTime* m1 = (struct MeetingTime*)a;
struct MeetingTime* m2 = (struct MeetingTime*)b;
return m1->end - m2->end;
}
// 主函数
int main() {
int n; // 会议数量
printf("请输入会议数量:");
scanf("%d", &n);
struct MeetingTime meetings[n];
printf("请分别输入每个会议的开始时间和结束时间(以空格分隔):\n");
for (int i = 0; i < n; i++) {
scanf("%d %d", &meetings[i].start, &meetings[i].end);
}
// 按照会议结束时间排序
qsort(meetings, n, sizeof(struct MeetingTime), compare);
// 贪心算法求解,选择结束时间最早的会议
int count = 0; // 记录会场数量
int end_time = 0; // 记录当前会场的结束时间
printf("最少需要使用 %d 个会场。\n", count+1);
for (int i = 0; i < n; i++) {
if (meetings[i].start >= end_time) {
// 如果当前会议的开始时间晚于当前会场的结束时间,则需要使用一个新的会场
count++;
end_time = meetings[i].end;
printf("最少需要使用 %d 个会场。\n", count+1);
}
}
return 0;
}
```
该算法还能进一步优化,使用堆来记录当前会场的结束时间即可在O(1)时间内得到最早结束的会场。
阅读全文