作業調度問題

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();
            }


        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章