多机调度问题贪心算法c语言
时间: 2023-07-12 11:48:25 浏览: 198
多机调度问题是一个典型的贪心问题,具体的贪心策略是选择最短的任务先执行,以最小化任务的平均完成时间。以下是一个使用贪心算法解决多机调度问题的C语言代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct task {
int id;
int time;
} Task;
int cmp(const void *a, const void *b) {
Task *taskA = (Task*)a;
Task *taskB = (Task*)b;
return taskB->time - taskA->time;
}
int main() {
int n, m;
printf("请输入任务数和机器数:");
scanf("%d%d", &n, &m);
Task tasks[n];
for (int i = 0; i < n; i++) {
tasks[i].id = i + 1;
printf("请输入第%d个任务的执行时间:", i + 1);
scanf("%d", &tasks[i].time);
}
// 将任务按执行时间从大到小排序
qsort(tasks, n, sizeof(Task), cmp);
int machine[m];
for (int i = 0; i < m; i++) {
machine[i] = 0;
}
for (int i = 0; i < n; i++) {
int minIdx = 0;
for (int j = 1; j < m; j++) {
if (machine[j] < machine[minIdx]) {
minIdx = j;
}
}
printf("将任务%d分配给机器%d,执行时间为%d\n", tasks[i].id, minIdx + 1, machine[minIdx]);
machine[minIdx] += tasks[i].time;
}
return 0;
}
```
首先输入任务数和机器数,然后输入每个任务的执行时间,并将任务按执行时间从大到小排序。接下来初始化机器的执行时间为0,然后依次将任务分配给执行时间最短的机器执行,并输出分配的结果。最后输出每个机器执行的总时间。
阅读全文