最笨的方法实现批量作业调度问题。
计算出所有作业的左右排列的耗时
#include <stdio.h>
#include <stdlib.h>
int flowadd (int *arr, int *arr1, int *arr2, int len) {
int i, dlte = 0 - arr2[arr[0]];
int sum = arr1[arr[0]] + arr2[arr[0]];
for (i = 1; i < len; ++i) {
dlte += arr1[arr[i]];
sum += (dlte > 0 ? dlte : 0);
sum += arr2[arr[i]];
dlte -= arr2[arr[i]];
}
return sum;
}
void printArr (int *arr, int len, int val) {
int i;
printf ("val = %02d ; arr : ", val);
for (i = 0; i < len; ++i) {
printf ("%d ", arr[i]);
}
printf ("\n");
}
void flowshop (int *arr, int *arr1, int *arr2, int len, int pos) {
int i;
if (pos == len) {
int tmp = flowadd (arr, arr1, arr2, len);
printArr (arr, len, tmp);
return;
}
for (i = pos; i < len; ++i) {
int tmp = arr[pos];
arr[pos] = arr[i];
arr[i] = tmp;
flowshop (arr, arr1, arr2, len, pos + 1);
arr[i] = arr[pos];
arr[pos] = tmp;
}
}
int main (void) {
int arr1[] = {2,3,2,3};
int arr2[] = {1,1,3,5};
int arr[] = {0,1,2,3};
flowshop (arr, arr1, arr2, sizeof(arr1)/sizeof(int), 0);
return 0;
}