流水作业调度

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define MAX 100  

typedef struct 
{
    int a;  //作业在机器m1上运行的时间
    int b;  //作业在机器m2上运行的时间
    int index;   //标识第几个作业
}job;

job Job[MAX];
job job1[MAX];  //存放a
job job2[MAX];  //存放a>=b的作业

int cmp1(const void *job1, const void *job2) //非降序序排序 
{
    return (*(job *)job1).a >= (*(job *)job2).a;
}

int cmp2(const void *job1, const void *job2) //非升序序排序
{
    return (*(job *)job1).b <= (*(job *)job2).b;
}

//n为作业数
//n个作业先在机器m1上运行,再在机器m2上运行,打印出n个作业运行所需最小时间
//并打印出作业调度顺序
void flowShow(int n)
{
    int i;
    int i1 = 0, i2 = 0;
    for(i=0; iif(Job[i].a//存放a
        {
            job1[i1].a = Job[i].a;
            job1[i1].b = Job[i].b;
            job1[i1].index = Job[i].index;
            i1++;
        }
        else  //存放a>=b的作业
        {
            job2[i2].a = Job[i].a;
            job2[i2].b = Job[i].b;
            job2[i2].index = Job[i].index;
            i2++;
        }
    }

    qsort(job1, i1, sizeof(job), cmp1); //将job1中作业依a的非减序排序
    qsort(job2, i2, sizeof(job), cmp2); //将job2中作业依b的非增序排序

    int sum1 = job1[0].a;
    int sum2 = sum1 + job1[0].b;
    for(i=1; i//M1在执行job1[i]作业的同时,M2在执行job1[i-1]号作业,最短执行时间取决于M1与M2谁后执行完
        sum1 += job1[i].a;    
        sum2 = sum2for(i=0; iprintf("最优调度下所需时间为:%d\n", sum2);

    printf("最优调度为:\n");
    for(i=0; iprintf("作业%d(%d,%d)\n", job1[i].index, job1[i].a, job1[i].b);
    for(i=0; iprintf("作业%d(%d,%d)\n", job2[i].index, job2[i].a, job2[i].b);
}

int main()
{
    int n;
    printf("输入作业数:");
    scanf("%d", &n);
    int i;
    printf("输入各作业在机器m1上运行时间:\n");
    for(i=0; i1;
        scanf("%d", &Job[i].a);
    }
    printf("输入各作业在机器m2上运行时间:\n");
    for(i=0; iscanf("%d", &Job[i].b);
    }
    flowShow(n);
    return 0;
}

你可能感兴趣的:(动态规划)