`

电梯调度

 
阅读更多
public class Elevator {
    private static int totalFloorNum = 10;
    private static int totalStopNum = 4;
    private static int[] person = new int[totalFloorNum];
    private static int[][] floorIndex = new int[totalFloorNum][totalStopNum];

    private static int computePeopleStairs(int floor, int stopNum) {
        int max = totalFloorNum - stopNum;

        if (stopNum == 0) {
            int temp = 0;
            for (int i = floor + 1; i < max; i++) {
                temp += person[i] * (i - floor);
            }
            return temp;
        } else {
            int minPersonStair = Integer.MAX_VALUE;
            for (int i = floor + 1; i <= max; i++) {
                int temp = 0;
                int mid = (floor + i) / 2;

                if (floor == 0) {
                    for (int j = 1; j < i; j++) {
                        temp += (i - j) * person[j];
                    }
                } else {
                    for (int j = floor + 1; j <= mid; j++) {
                        temp += person[j] * (j - floor);
                    }
                    for (int j = mid + 1; j <= i; j++) {
                        temp += person[j] * (i - j);
                    }
                }
                temp += computePeopleStairs(i, stopNum - 1);
                if (temp < minPersonStair) {
                    minPersonStair = temp;
                    floorIndex[floor][stopNum - 1] = i;
                }
            }
            return minPersonStair;
        }

    }

    public static void main(String[] args) {
        for (int i = 0; i < totalFloorNum; i++) {
            person[i] = i + 1;
        }

        for (int i = 0; i < totalFloorNum; i++) {
            System.out.println(i + "th floor: " + person[i]);
        }
        int minPeopleStair = computePeopleStairs(0, totalStopNum);
        System.out.println("Min stairs is " + minPeopleStair);
        int stopNum = totalStopNum - 1;
        int selectedFloor = floorIndex[0][stopNum];
        while (stopNum >= 0) {
            System.out.println(selectedFloor);
            stopNum--;
            if (stopNum >= 0) {
                selectedFloor = floorIndex[selectedFloor][stopNum];
            }
        }
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics