作业调度问题

import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Vector;



public class JobScheduling2 {

    static class Job implements Comparator<Job>{
        int id;
        double needTime;
        public Job(){

        }
        public Job(int id, double needTime){
            this.id = id;
            this.needTime = needTime;
        }
        @Override
        public int compare(Job o1, Job o2) {
            return (o1.needTime > o2.needTime)?-1:1;
        }
        public String toString(){
            return ""+needTime;         
        }

    }
    static class Machine implements Comparator<Machine>{
        int id;
        double runningTime;
        Vector<Job> taskList;

        public Machine(int id, double runningTime){
            this.id = id;
            this.runningTime = runningTime;
            this.taskList = new Vector<Job>();
        }
        public Machine(){this.taskList = new Vector<Job>();}

        @Override
        public int compare(Machine o1, Machine o2) {
            return o1.runningTime>o2.runningTime?1:-1;
        }

    }
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int n;  //作业个数
        int m;  //机器数
        while(scan.hasNext()){
            n = scan.nextInt();
            m = scan.nextInt();

            Vector<Job> jobs = new Vector<>();
            for(int i=0; i<n; i++){
                jobs.add(new Job(i+1, scan.nextDouble()));
            }
            Collections.sort(jobs, new Job());

//          for(int i=0; i<n; i++){
//              System.out.print(jobs.get(i).needTime + " ");
//          }
            PriorityQueue<Machine> pqMachine = new PriorityQueue<Machine>(new Machine());

            for(int i=0; i<m; i++){
                pqMachine.add(new Machine(i+1, 0));
            }
            for(int i=0; i<n; i++){
                Machine machine = pqMachine.poll();
                machine.runningTime += jobs.get(i).needTime;
                machine.taskList.add(jobs.get(i));
                pqMachine.add(machine);
            }
            while(pqMachine.size()>0){
                Machine machine = pqMachine.poll();
                System.out.print("第" + machine.id + "台机器工作时间是:" + machine.runningTime);
                System.out.print("  这些任务(任务所需时间)工作在这台机器上:");
                for(int j=0; j<machine.taskList.size(); j++){
                    System.out.print(machine.taskList.get(j).needTime + " ");
                }
                System.out.println();
            }


        }

    }

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值