C语言使用贪心法求最小延迟调度问题的源代码
时间: 2024-02-25 21:59:18 浏览: 96
下面是一个使用贪心算法求解最小延迟调度问题的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
typedef struct {
int start_time; // 开始时间
int duration; // 持续时间
int deadline; // 截止时间
} Task;
int cmp(const void *a, const void *b) {
Task *task_a = (Task *)a;
Task *task_b = (Task *)b;
return task_a->deadline - task_b->deadline;
}
int min(int a, int b) {
return a < b ? a : b;
}
int main(void) {
int n;
Task tasks[MAX_N];
printf("请输入任务数量:");
scanf("%d", &n);
printf("请分别输入每个任务的开始时间、持续时间和截止时间:\n");
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &tasks[i].start_time, &tasks[i].duration, &tasks[i].deadline);
}
// 按照截止时间从小到大排序
qsort(tasks, n, sizeof(Task), cmp);
int cur_time = 0; // 当前时间
int total_time = 0; // 总延迟时间
for (int i = 0; i < n; i++) {
cur_time += tasks[i].duration; // 更新当前时间
total_time += max(0, cur_time - tasks[i].deadline); // 更新总延迟时间
}
printf("最小延迟时间为:%d\n", total_time);
return 0;
}
```
该代码首先读入任务数量和每个任务的开始时间、持续时间和截止时间,然后按照截止时间从小到大排序。接着使用贪心算法,依次处理每个任务,更新当前时间和总延迟时间。最后输出最小延迟时间。
阅读全文