zoukankan      html  css  js  c++  java
  • 贪心法多作业调度

    View Code
    #include<iostream>
    using namespace std;
    #define max 100
     
    float d[max];//m台机器的空闲时间存储在d[m]中
    int s[max][max];//把第j个作业放到第i太机器上去运行
     
    typedef struct homework{//数据结构来存储作业信息 
        int ID;
        float time; 
    }hw;
    
    typedef struct m{//快结构体的因为是把在改机器的作业存起来
        int number;//记录存储在改机器的作业个数 
        int ma[max];
        float timesum;
    }mc;
    
    int compare(const void *b1,const void *b2){//比较函数 
        hw *aa=(hw *)b1;
        hw *bb=(hw *)b2;
        return (int)((bb->time)-(aa->time));//降序排序 
    }
    
    
    int schedules(hw *h,int n,int m,mc *machince){
        qsort(h,n,sizeof(hw),compare);//调用系统函数对结构数组排序 
        for(int i=0;i<m;i++){//初始化s[][],把前最大 
            machince[i].timesum=h[i].time;//初始化机器总时间 
            machince[i].number=1;//初始化,每台机器有一个作业 
            machince[i].ma[0]=h[i].ID;
        }
      
        for(int i=m;i<n;i++){
            int temp=1;
            float min=machince[0].timesum;
            for(int k=1;k<m;k++){//找出最先空闲的机器 
                if(min>machince[k].timesum){
                    min=machince[k].timesum;
                    temp=k;//记录最先空闲的机器 ,因为程序从0开始,所以,temp实际应加一 
                }
             } 
             machince[temp].timesum+=h[i].time;
             machince[temp].number++;//增加了一个作业在此机器上运行 
             machince[temp].ma[machince[temp].number-1]=h[i].ID;//把作业加入机器中 
        }
        return 0;
        
    }
    
    int main(){
        hw h[max];//用h[]数组存放作业 
        mc machince[max];
        int n,m;
        cout<<"请输入作业的个数n和机器台数m:"<<endl;
        cin>>n>>m;    
        for(int i=0;i<n;i++){
              cout<<""<<i+1<<" 个作业所需的时间为:";
              cin>>h[i].time;
                 h[i].ID=i+1; 
            } 
        if(m>=n){
            schedules(h,n,m,machince);
            cout<<"做完所需的时间为:"<<h[0].time<<endl<<"把作业随机分到一台机器运行(每台机器一个作业)"<<endl;
            return 0; 
        }       
        else{    
            schedules(h,n,m,machince);
            for(int i=0;i<m;i++){
                cout<<""<<i+1<<" 个机器的作业为:";
                for(int k=0;k<machince[i].number;k++)
                    cout<<machince[i].ma[k]<<" ";
                cout<<endl; 
            }
        } 
        return 0;
        
    }
  • 相关阅读:
    away3d 4.1 alpha 教程 换装篇 <3> 人物动态换装DEMO
    书本资料汇总
    洪小瑶学IOS(一):准备起航 <ObjectiveC基础教程>笔记
    Flex 4 权威指南 学习笔记
    通过存储过程建立灵活的SQL计划任务
    javascript 未结束的字符串常量
    SQL重复记录查询
    重置数据库自增字段
    C#获取周一、周日的日期 函数类
    C# ,ASP.NET,Winform将数据导出到Execl汇总
  • 原文地址:https://www.cnblogs.com/aijianiula/p/2763735.html
Copyright © 2011-2022 走看看