网站大量收购闲置独家精品文档,联系QQ:2885784924

汽车加油问题实验报告.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汽车加油问题实验报告

一、实验名称: 用解问题 二、实验目的: 把两加油站的距离放在数组中,a[1..k]表示从起始位置开始跑,经过k个加油站,a[i]表示第i-1个加油站到第i个加油站的距离。汽车在运行的过程中如果能跑到下一个站则不加油,否则要加油。 输入数据示例 7 7 1 2 3 4 5 1 6 6 输出数据 4 。 三、使用的策略: 贪心算法、回溯算法等。 四、实验内容: (二) 问题分析(前提行驶前车里加满油) 对于这个问题我们有以下几种情况:设加油次数为k,每个加油站间距离为a[i];i=0,1,2,3……n 1.始点到终点的距离小于N,则加油次数k=0; 2.始点到终点的距离大于N, A 加油站间的距离相等,即a[i]=a[j]=L=N,则加油次数最少k=n; B 加油站间的距离相等,即a[i]=a[j]=LN,则不可能到达终点; C 加油站间的距离相等,即a[i]=a[j]=LN,则加油次数k=n/N(n%N==0)或k=[n/N]+1(n%N!=0); D 加油站间的距离不相等,即a[i]!=a[j],则加油次数k通过以下算法求解。 (三)算法描述 1.贪心算法解决方案 贪心算法的基本思想 该题目求加油最少次数,即求最优解的问题,可分成几个步骤,一般来说,每个步骤的最优解不一定是整个问题的最优解,然而对于有些问题,局部贪心可以得到全局的最优解。贪心算法将问题的求解过程看作是一系列选择,从问题的某一个初始解出发,向给定目标推进。推进的每一阶段不是依据某一个固定的递推式,而是在每一个阶段都看上去是一个最优的决策(在一定的标准下)。不断地将问题实例归纳为更小的相似的子问题,并期望做出的局部最优的选择产生一个全局得最优解。 贪心算法的适用的问题 贪心算法适用的问题必须满足两个属性: 贪心性质:整体的最优解可通过一系列局部最优解达到,并且每次的选择可以依赖以前做出的选择,但不能依赖于以后的选择。 最优子结构:问题的整体最优解包含着它的子问题的最优解。 贪心算法的基本步骤 分解:将原问题分解为若干相互独立的阶段。 解决:对于每一个阶段求局部的最优解。 合并:将各个阶段的解合并为原问题的解。 [问题分析]由于汽车是由始向终向开的,我们最大的麻烦就是提出问题是解决的开始.为了着手解决遇到的困难,取得最优方案includemath.h includestudio.h int add(int b[ ],int m,int n) { //求一个从m到n的数列的和 int sb; for(int i=m;in;i++) sb+=b[i]; return sb; } int Tanxin(int a[n], int N) //a[n]表示加油站的个数,N为加满油能行驶的最远距离 { int b[n]; //若在a[i]加油站加油,则b[i]为1,否则为0 int m=0; if(a[i]N) return ERROR; //如果某相邻的两个加油站间的距离大于N,则不能到达终点 if(add(a[i], 0, n)N) { //如果这段距离小于N,则不需要加油 b[i]=0; return add(b[i],0,n); } if(a[i]==a[j]a[i]==N) { //如果每相邻的两个加油站间的距离都是N,则每个加油站都需要加油 b[i]=1; return add(b[i],0,n); } if(a[i]==a[j]a[i]N) { //如果每相邻的两个加油站间的距离相等且都小于N if( add(a[i],m,k) N add(a[i],m,k+1) N ) { b[k]=1; m+=k; } return add(b[i],0,n); } if(a[i]!=a[j]) { //如果每相邻的两个加油站间的距离不相等且都小于N if( add(a[i],m,k) N add(a[i],m,k+1) N ) { b[k]=1; m+=k; } return add(b[i],0,n); } viod main( ) { int a[ ]; scanf(%d,a); scanf(/n); scanf(/d,N); Tanxin(a[ ],0,n); } 贪心算法正确性证明: 贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。对于一个具体的问题,

文档评论(0)

jiulama + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档