贪心算法-旅行规划问题.doc_第1页
贪心算法-旅行规划问题.doc_第2页
贪心算法-旅行规划问题.doc_第3页
贪心算法-旅行规划问题.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上机04 实验名称1、 问题描述二、旅行规划问题G先生想独自驾驶汽车从城市A到城市B。从城市A到城市B的距离为dkm。汽车油箱的容量为c升。每升汽车能行驶ekm。出发点每升汽油的价格为p元。从城市A到城市B沿途有n个加油站。第i个加油站距出发点的距离为dikm,油价为每升pi元。请利用贪心算法,规划如何加油才能使旅行的费用最省,编程实现该算法并证明算法的正确性。2、 算法设计思想贪心算法3、 算法过程描述贪心选择性质证明(1)当油箱中的油不够到达最近的加油站时此题无解。(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 b.pos) return true; return false;int main() double Cmax,D,Davg; int N; printf(汽车油箱容量c:); scanf(%lf, &Cmax); printf(A到B的距离d:);scanf(%lf, &D);printf(每升汽油能行驶的距离e:);scanf(%lf, &Davg);printf(加油站的数量n:);scanf(%d, &N);printf(每个加油站的油价以及到A的距离d:n, N); for(int i = 0; i N; i+) scanf(%lf %lf, &gassti.price, &gassti.pos); sort(gasst, gasst+N, cmp); if(D = 0) printf(0.00n); return 0; if(gasst0.pos != 0) printf(最大行驶距离为:0n); return 0; int curstnum = 0; double curgas = 0; double curcost = 0; bool flag = false; double maxrundis = Cmax * Davg; while(!flag) bool tag = false; bool ifcheaper = false; double cheapestprice = 10000; int cheapestnum; for(int i = curstnum + 1; i N; i+) if(gassti.pos - gasstcurstnum.pos) = maxrundis) tag = true; if(gassti.price gasstcurstnum.price) ifcheaper = true; double dist = gassti.pos - gasstcurstnum.pos; double needgas = dist / Davg - curgas; curgas = 0; curcost += (needgas * gasstcurstnum.price); gasstcurstnum.fillc = needgas; curstnum = i; break; if(gassti.price = (D - gasstcurstnum.pos) double dist = D - gasstcurstnum.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 & !ifcheaper) double needgas = Cmax - curgas; gasstcurstnum.fillc = needgas; curcost += (needgas * gasstcurstnum.price); double dist = gasstcheapestnum.pos - gasstcurstnum.pos; curgas = Cmax - dist / Davg; curstnum = cheapestnum; else if(!tag) printf(最大行驶距离为:%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论