lab5_贪心算法设计与应用(推荐文档)

上传人:Sc****h 文档编号:136174059 上传时间:2022-08-16 格式:DOC 页数:6 大小:119.50KB
收藏 版权申诉 举报 下载
lab5_贪心算法设计与应用(推荐文档)_第1页
第1页 / 共6页
lab5_贪心算法设计与应用(推荐文档)_第2页
第2页 / 共6页
lab5_贪心算法设计与应用(推荐文档)_第3页
第3页 / 共6页
资源描述:

《lab5_贪心算法设计与应用(推荐文档)》由会员分享,可在线阅读,更多相关《lab5_贪心算法设计与应用(推荐文档)(6页珍藏版)》请在装配图网上搜索。

1、实验五贪心算法设计与应用一基本原理的概括贪心法是一种算法设计技术,通常用于求解最优化问题。通过一系列选择步骤来构造问题的解, 每一步都是对当前部分解的一个扩展, 直至获得问题的完整解。所做的每一步选择都必须满足:1)可行的:必须满足问题的约束。2)局部最优:当前所有可能的选择中最佳的局部选择。3)不可取消 :选择一旦做出,在后面的步骤中就无法改变了。要注意的是, 贪心法不能保证总能得到最优解 (一系列的局部最优选择不能保证最后得到整体最优解)二该类算法设计与实现的要点贪心算法往往效率高, 一般时间复杂性为多项式阶。 贪心算法一般较简单, 其关键和难点在于贪心选择策略的确定,以及证明相应的贪心算

2、法确实可求出最优解。三实验目的和要求理解贪心算法的基本原理,掌握贪心算法设计的基本方法及其应用;四实验内容(一 ) 加油问题( Problem Set 1702):1. 问题描述一个旅行家想驾驶汽车从城市A 到城市 B(设出发时油箱是空的) 。给定两个城市之间的距离 dis 、汽车油箱的容量c、每升汽油能行驶的距离d、沿途油站数 n、油站 i离出发点的距离 di 以及该站每升汽油的价格pi,i=1,2, ,n 。设 d1=0d2dn 。要花最少的油费从城市A 到城市 B,在每个加油站应加多少油,最少花费为多少?2. 具体要求Input输入的第一行是一个正整数k,表示测试例个数。接下来几行是k

3、个测试例的数据,每个测试例的数据由三行组成,其中第一行含4 个正整数,依次为A 和 B 两个城市之间的距离 d1、汽车油箱的容量c(以升为单位) 、每升汽油能行驶的距离d2、沿途油站数n (1=n=200) ;第二行含 n 个实数 d1, d2, , dn,表示各油站离出发点的距离(d1=0);第三行含 n 个实数 p1, p 2 , , pn,表示各油站每升汽油的价格。同一行的数之间用一个空格隔开。Output对于每个测试例输出一行, 含一个实数,表示从城市到城市所要花费的最少油费(输出的结果精确到小数点后一位) 。若问题无解,则输出“No Solution ”。3. 代码如下:#inclu

4、de#define MAX 20void look(float dis,float pir,int n,int d2,int oil)/dis距离起点距离,pir 油价int i,j,k;float pirce=0.0,c1=0,x,c2;for(j=0;j=n;j+)for(i=j+1;i=n;i+)if(piri=oil)x=oil-c1;elsex=c2-c1;if(x0)x=0;pirce=pirce+pirj*x;break;c1=c1+x-(disj+1-disj)/d2);printf(%.1f,pirce);void main()int k,i,j,nMAX,cMAX,d1MA

5、X,d2MAX,lengthMAX,flagMAX; float AMAXMAX,BMAXMAX; printf( 输入测试例个数: n);scanf(%d,&k);for(i=0;ik;i+)printf( 输入第 %d 个数据: n,i+1);flagi=0;scanf(%d %d %d %d,&d1i,&ci,&d2i,&ni);lengthi=ci*d2i;for(j=0;jni;j+)scanf(%f,&Aij);Aini=d1i*1.0;for(j=0;j0;j-)if(Aij-Aij-1lengthi)flagi=1;if(flagi=1)printf( 第 %d 次结果: ,i

6、+1);printf(NO solution!n);elseprintf( 第 %d 次结果: ,i+1);printf( 最少油费: );look(Ai,Bi,ni,d2i,ci);printf(n);printf(n);(二 ) 黑白点的匹配(Problem Set 1714):1. 问题描述设平面上分布着n 个白点和n 个黑点,每个点用一对坐标(x, y )表示。一个黑点b=( xb,yb)支配一个白点 w=(xw, yw) 当且仅当 xb=xw 和 yb=yw 。若黑点 b 支配白点 w,则黑点 b 和白点 w 可匹配(可形成一个匹配对) 。在一个黑点最多只能与一个白点匹配,一个白点最

7、多只能与一个黑点匹配的前提下,求n 个白点和n 个黑点的最大匹配对数。2.具体要求Input输入的第一行是一个正整数k,表示测试例个数。接下来几行是k 个测试例的数据,每个测试例的数据由三行组成,其中第一行含1 个正整数n(n16) ;第二行含2n 个实数xb1, yb 1,xb 2, yb 2, , xbn, yb n, (xbi , yb i), i=1, 2, , n 表示 n 个黑点的坐标;第三行含2n 个实数 xw 1 , yw1 ,xw 2, yw 2, , xwn, yw n,(xw i, yw i) ,i=1, 2, , n 表示 n 个白点的坐标。同一行的实数之间用一个空格隔

8、开。Output对于每个测试例输出一行,含一个整数,表示n 个白点和n 个黑点的最大匹配对数。3.代码如下:#include iostream.h#include math.hstruct pointdouble x,y;void sort(point *a,int n)int i,j;point p;for(i=1;i=n;i+)for(j=i+1;jaj.x|(ai.x=aj.x&(ai.yaj.y)p=ai;ai=aj;aj=p;double dis(point pointw,point pointb)double dist;dist=sqrt(pow(pointb.x-pointw.x

9、),2)+pow(pointb.y-pointw.y),2);return dist;int main()int i,j,n,k;cinn;point *pointw=new pointn;point *pointb=new pointn;int *b=new intn;for(i=1;ipointbi.x;for(i=1;ipointbi.y;for(i=1;ipointwi.x;for(i=1;ipointwi.y;sort(pointw,n);for(i=1;i=n;i+)bi=1;int count=0;for(i=1;i=n;i+)double mindis=32767;double Min=mindis;for(j=1;j=pointwi.x&pointbj.y=pointwi.y)if(mindisdis(pointwi,pointbj)mindis=dis(pointwi,pointbj);k=j;if(mindisMin)bk=0;count+;coutpointwi.x,pointwi.y&pointbk.x,pointbk.yendl;cout 最大匹配数:countendl;return 0;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!