贪心算法之汽车加油问题

/**
 * 一辆汽车加满油后可行驶n(例如n=100)公里。路途中有若干个加油站(例如加油站之间间隔d = [50,80,39,60,40,32] * 单位是公里)。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。对于给定的nn<=5000 * kk<=1000)个加油站位置。
 */
public class C_Solution {

    /**
     * @param x 每个加油站的相隔距离
     * @param n 汽车加满油的最大行驶距离
     * @return
     */
    public static int greedy(int x[], int n){
        //sum是加油次数
        //s是汽车经过加油站没有加油的情况下的行驶距离
        int sum = 0, k = x.length, s = 0;
        //一开始满油,
        //某两个加油站之间距离大于汽车满油最大行驶距离,则无法到达目的地。
        for (int j = 0; j < k; j++) {
            if (x[j] > n) {
                System.out.println("无法到达目的地!!!");
                return -1;
            }
        }
        for (int i = 0; i < k; i++) {
            s += x[i];
            if (s > n) {
                sum++;
                s = x[i];
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        System.out.println("汽车满油情况下的最大行驶旅程:");
        // maximum traveling
        int max = read.nextInt();

        System.out.println("加油站个数:");
        int gNum = read.nextInt(); //number of gas stations

        int space[] = new int[gNum];
        System.out.println("每个加油站的相隔距离:");
        for (int i = 0; i < gNum; i++) {
            space[i] = read.nextInt();
        }
        int res = greedy(space, max);
        System.out.println("要加油" + res + "次。");
    }

}


//测试贪心算法
class AA {
    public static void main(String[] args) {
        int max = 20;
        int gNum = 5;
        int[] space = {20, 15, 5, 18, 10};

        for (int i = 0; i < 5; i++) {
            if (max < space[i]) {
                System.out.println("No solution.");
                return;
            }
        }
        int gTimes = 0;
        int travel = 0;
        for (int i = 0; i < 5; i++) {
            travel += space[i];
            if (max < travel) {
                gTimes++;
                travel = space[i];
            }
        }
        System.out.println("times: " + gTimes);
    }
}

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/qq_36819098/article/details/80993409
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞