📄 jobdispatch.c
字号:
//利用回溯法进行批处理作业调度#include <stdio.h>void backtrace(int);void swap(int *, int, int);void print();//各作业所需的处理时间int time[][2] = { //下标从1开始 {0, 0}, {2, 1}, {3, 1}, {2, 3}};//作业数int num;//机器1完成处理时间int f1;//完成时间和int f;//当前最优值int bestf = 32655;//当前作业调度int x[] = {-1, 1, 2, 3}; //下标从一开始//当前作业最优调度int bestx[4];//机器2完成处理时间int f2[4];int main(void){ scanf("%d", &num); backtrace(1); print(); return 0;}void backtrace(int t){ if(t > num) { int i; for(i = 1;i <= num;i++) bestx[i] = x[i]; bestf = f; } else { int j = t; for(;j <= num;j++) { f1 += time[x[j]][0]; printf("f1 = %d ", f1); f2[t] = ((f2[t-1] > f1) ? f2[t-1] : f1) + time[x[j]][1]; f += f2[t]; if(f < bestf) { swap(x, t, j); backtrace(t+1); swap(x, j, t); } f1 -= time[x[j]][0]; f -= f2[t]; } }}void swap(int *a, int i, int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp;}void print(){ printf("bestf = %d\n", bestf); int i; for(i = 1; i <= num; i++) printf("%d ", bestx[i]); printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -