1、上机 04 实验名称1、 问题描述二、旅行规划问题G 先生想独自驾驶汽车从城市 A 到城市 B。从城市 A 到城市 B 的距离为 dkm。汽车油箱的容量为 c 升。每升汽车能行驶 ekm。出发点每升汽油的价格为 p 元。从城市 A 到城市 B 沿途有 n 个加油站。第 i 个加油站距出发点的距离为 dikm,油价为每升 pi 元。请利用贪心算法,规划如何加油才能使旅行的费用最省,编程实现该算法并证明算法的正确性。2、 算法设计思想贪心算法3、 算法过程描述贪心选择性质证明(1)当油箱中的油不够到达最近的加油站时此题无解。(2)当油箱的容量与油耗的比够到每一个加油站时此题有解。最优解即为用最便宜
2、的油价将车开到终点,所以需要在保证到达下一个加油站时,油箱中的油够用。记录在每一个加油站的加油量和油价,汇总后的价格即为最优解。4、 算法实现及运行结果#include #include #include using namespace std;typedef struct double pos;double price;double fillc; gasstation;gasstation gasst502;bool cmp(gasstation a, gasstation b) if(a.pos = (D - gasstcurstnum.pos) double dist = D - gas
3、stcurstnum.pos;double needgas = dist / Davg - curgas;curcost += needgas * gasstcurstnum.price;gasstcurstnum.fillc = needgas;printf(“n 最小花费为: %.2lfn“, curcost);printf(“n 每个加油站的加油量为: n“);for(int i = 0; i N; i+) printf(“%.2lfn“,gassti.fillc);return 0;if(tag gasstcurstnum.fillc = needgas;curcost += (needgas * gasstcurstnum.price);double dist = gasstcheapestnum.pos - gasstcurstnum.pos; curgas = Cmax - dist / Davg;curstnum = cheapestnum;else if(!tag) printf(“最大行驶距离为:%.2lfn“,gasstcurstnum.pos + maxrundis);return 0;return 0;5、 算法复杂度分析及算法改进时间复杂度 O(n) :O(n*log2(n)。空间复杂度 S(n) = n。