/* Copyleft: Ming Lin <minggr@gmail.com> */
#include <stdio.h>
#include <stdlib.h>
void print_line(int *l, int n)
{
int i;
for (i = 0; i < n; i++)
printf("line %d, station %d\n", l[i]+1, i+1);
}
int fastest_way(int s_entry[2], int s0[], int s1[],
int s0_to_s1[], int s1_to_s0[], int num, int s_exit[2])
{
int *f0, *f1;
int *l0, *l1;
int tmp;
int i;
f0 = malloc(num*sizeof(int));
f1 = malloc(num*sizeof(int));
l0 = malloc(num*sizeof(int));
l1 = malloc(num*sizeof(int));
for (i = 0; i < num; i++) {
l0[i] = l1[i] = -1;
}
f0[0] = s_entry[0] + s0[0];
f1[0] = s_entry[1] + s1[0];
for (i = 1; i < num; i++) {
l0[i-1] = 0;
f0[i] = f0[i-1] + s0[i];
tmp = f1[i-1] + s1_to_s0[i-1] + s0[i];
if (tmp < f0[i]) {
l0[i-1] = 1;
f0[i] = tmp;
}
l1[i-1] = 1;
f1[i] = f1[i-1] + s1[i];
tmp = f0[i-1] + s0_to_s1[i-1] + s1[i];
if (tmp < f1[i]) {
l1[i-1] = 0;
f1[i] = tmp;
}
}
l0[i-1] = 0;
l1[i-1] = 0;
tmp = f0[i-1] + s_exit[0];
if (f1[i-1] + s_exit[1] < tmp) {
tmp = f1[i-1] + s_exit[1];
l0[i-1] = 1;
l1[i-1] = 1;
}
if (l0[i-1] == 0)
print_line(l0, num);
else
print_line(l1, num);
free(f0);
free(f1);
return tmp;
}
int main()
{
int s_entry[2] = {2, 4};
int s_exit[2] = {3, 2};
int s0[] = {7, 9, 3, 4, 8, 4};
int s1[] = {8, 5, 6, 4, 5, 7};
int s0_to_s1[] = {2, 3, 1, 3, 4};
int s1_to_s0[] = {2, 1, 2, 2, 1};
int num = 6;
printf("fastest_way: %d\n", fastest_way(s_entry, s0, s1,
s0_to_s1, s1_to_s0, num, s_exit));
return 0;
}
装配线调度问题
最新推荐文章于 2024-06-22 21:12:20 发布