ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:219.50KB ,
资源ID:10481122      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10481122.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法课程设计.docx

1、算法课程设计题目一 数塔问题问题描述:有如右图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大解决问题所用的方法:动态规划为了求得数塔1的解。我们将数塔1分解为如下的数塔1顶点、数塔2和数塔3数塔1的解=数塔1的顶点+数塔2解与数塔3解的最大值,同理,我们也将数塔2和数塔3分解为更小的数塔4、数塔5、数塔6和数塔7 当数塔不可再分(仅有一层)时,就是分治的最小单元。现运用动态规划的思想,自底向上求解,并将中间果存储想来以便以后再用。A(1n,1n)表示数塔各层数的数字B(1n,1,n)用来存储中间结果基于分治的方法,得到递推公式如下:

2、注:i=1n , j=1i自底向上求解该问题.算法描述: 算法名称:MAXVALUE 输入:树塔的层数n和各层的数字Ann 输出:最大值和路径Cn 算法实现细节(可以用流程图,伪代码):1. for i 1 to n2. Bn,i An,i comment : 最下面一层为An,j3. end for4. for i n-1 to 15. for j 1 to i+16. Bi,j maxBi+1,j,Bi+1,j+1+Ai,j7. comment: Bi,j等于下面它下面两个数的最大值加上Ai,j8. end for9. end for10. k 111. C1 112. for i 2 t

3、o n13. if Bi,k+1 Bi,k then k k+114. comment:寻找路径,找它下面两个数中最大一个的下标并记录15. end if16. Ci k17. end for18. return B1,1 comment:返回最大路径的值 算法的时间复杂度算法实例: 数据的输入(可以有屏幕截图) 数据的输出(可以有屏幕截图)题目二 校园导航问题问题描述:设计你所在学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。解决问题所用的方法:贪心算法 校园导航问题为最短路径问题。设G=(V,E)是一个

4、每条边有非负长度的无向图,有一点s称为源点,校园导航问题就是要确定从s到V中的一个顶点x的的最短距离。初始时,将顶点集合分为两个集合B=s,C=1s-1,s+1n,每一步中,我们选定源点到它的距离已经得到的一个顶点cC,并将它移入B中。与C中的每个顶点c联系的是标记Dc,它是只经过B中顶点的最短路径,一旦顶点cC移到B中,与c相邻的每个顶点 C的标记就会被更新。这表示找到了经过c到的更短路径。当x C被移入B中时,x的标记就是从源s到顶点x的最短路径。 为了方便找出具体的的最短图径,我们将标记矩阵定义为二维矩阵D,第x列的最小值就是源s到顶点x的最小路径。A(1n,1n)为无向图的邻接矩阵,我

5、们寻找顶点s到s的最短路径无意义,我们将它到本身的距离定义为无穷大(只是为了方便)如下图:寻找最短路径时,我们选找顶点x列的最小值的行标i,若i不等于s,则再找第i列的最小值所在的行标j,依次下去,直到行标为s时,这条路径就是最短路径。算法描述: 算法名称:FINDMIN 输入:地点的个数n之间的距离Ai,j,以及起始点a和终点b 输出:最短路径值和其路径 算法实现细节(可以用流程图,伪代码):1. for i 1 to n2. Ci 0 comment:初始化路径3. end for4. for i 1 to n5. Bi 1 comment:Bi记录地点i是否可用6. end for7.

6、for j 1 to n8. Di,j 9. end for10. k a11. min 012. while k b13. for i 1 to n14. if Ak,i 15. then Dk,j Ak,j+min16. comment: 如果Ak,j不为无穷,则Dk,j等于Ak,j加上最小值17. end if18. min 19. for j 1 to n20. if Bj = 0 then continue21. end if22. for i 1 to n23. if Di,j min comment:寻找a点到可用地点的最小值24. then min Di,j25. l j26.

7、 end if27. end for28. end for29. k l30. end while31. min 32. for j 0 to n comment:寻找最小路径的值33. min minmin,Dj,b34. end for35. k - b36. i Dj,k43. then d j44. l Dj,k comment:寻找最短的路径45. end if46. end for47. k d48. end while49. Ci k50. if a=b then return 051. else return min52. end if 算法的时间复杂度:算法实例: 数据的输入

8、(可以有屏幕截图) 数据的输出(可以有屏幕截图)题目三 货物装车问题问题描述:在杂货店中有n 种不同的货物。现将货物装车,规定从每种货物中最多只能拿一件,车子的容量为c,物品i 需占用wi 的空间,价值为pi 。现要求设计算法和程序使车中装载的物品价值最大。当然,所装货物不能超过车的容量,且同一种物品不得拿走多件解决问题所用的方法:动态规划W(1n)表示物品所占用的空间P(1n)表示物品的价值Vi,j表示从前i个物品取出来放入容积为j的货车上的最大价值。i=0n,j=0c当i或j等于0时,V0,0等于0如果第i个物体的体积大于车的容积,则Vi,j=Vi-1,j如果第i个物体的体积不大于车的容积

9、,则Vi,j=Vi-1,j与Vi-1,j-Wi+Pi的最大值我们得到公式:运用动态动态规划的方法求解算法描述: 算法名称:BAGMAX 输入:物品的个数,货车的最大容量,每件货物应的体积和价值 输出:可拿的最大价值以及该拿的货物 算法实现细节(可以用流程图,伪代码):1. for i 0 to n2. Vi,1 03. end for4. for i 0 to c5. V1,i 06. end for7. for i 1 to n8. for j 1 to c9. if wi j then Vij Vi-1j10. else Vij maxVi-1j,Vi-1,j-Wi-1+Pi-111. c

10、omment:计算相应的值12. end if13. end for14. end for15. j c16. k 117. for i n to 018. if Vij = Vi-1 then Lk i19. k k+120. j j-Wi comment:找出应该拿的物品21. end if22. end for23. return Vn,c 算法的时间复杂度算法实例: 数据的输入(可以有屏幕截图)数据的输出(可以有屏幕截图)题目四 party幸运人士问题描述:一次大型的party最后节目是选取一位幸运人士,该人将获得组织者准备的一个钻石戒指。选择办法是让所有人一字排列,然后从左至右点数,

11、凡是奇数号的全部删除。对剩下的人,同样从左至右点数,逢奇数号就删除。如此不断循环,直到只剩1人为止。此即为幸运之解决问题所用的方法: 归纳法算法描述: 算法名称:LUCKY 输入:参加Party的人数 输出:幸运号码 算法实现细节(可以用流程图,伪代码):1. for i 1 to n2. PMi i3. end for4. while n 15. k 16. for i 1 to n7. if i不能被2整除8. then PMk PMi9. k k+110. end if11. end for12. n k-113. end while14. return PM1算法的时间复杂度算法实例:

12、 数据的输入输出(可以有屏幕截图)题目五 找零问题问题描述:假设你在餐馆吃饭花了不到100元,结账时你给服务员一张百元钞票,而服务员希望用最少的纸币给你找钱。请设计算法帮助服务员解决问题所用的方法: 贪心算法算法描述: 算法名称:CHANGE 输入:消费的钱money 输出:总的钱的张数和每种面额钱的张数 算法实现细节(可以用流程图,伪代码):1. tM 100 - money2. k 03. for i 1 to 94. Mi tM/MMi comment:MM表示各种面额的钱5. tM tM-Mi*MMi6. k k+Mi7. end for8. return k算法的时间复杂度算法实例:

13、 数据的输入输出(可以有屏幕截图)课程设计总结 算法是计算机理论和实践的核心,通过这次的课程设计,让我认识到算法的重要性。学好算法对以后的学习有很大的帮助,特别是对程序开发等方面上有着举足轻重的作用。这次的课程设计,共完成了5个题目,充分运用了归纳法、分治、贪心等方法对题目进行分析,并用C语言将之实现。通过这次比较完整的一个程序的设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的墓础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富。这是

14、我们都希望看到的也正是我们进行课程设计的目的所在。虽然设计内容繁多,过程繁琐但我的收获却更加丰富。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识也对自己提出了新的要求提高是有限的但提高也是全面的,正是这一次设计让我积累了许多实际经验,也必然会让我在未来的工作学习中表现出更高的应变能力和理解力。参考文献1张建勋 纪纲 C程序设计实用教程中国铁道出版社 2009年1月第1版2吴伟昶 方世昌 算法设计技巧与分析电子工业出版社 2010.10源码:/ 用动态规划法求解数塔问题.cpp : 定义控制台应用程序的入口点。/#include stdio.h#include using na

15、mespace std;#define N 20int ANN;int BNN;int CN;int maxValue(int n) int i,j; for(i=0;i=0;i-) /计算其它层 for(j=0;jBi+1j+1) Bij=Bi+1j+Aij; else Bij=Bi+1j+1+Aij; int k=0; C0=0; for(i=1;iBik) k+; Ci=k; return B00;void main() int i,j,n; coutn; for(i=0;in;i+) for(j=0;j=i;j+) cout请输入第 i+1 层的第 j+1Aij; i=maxValue

16、(n); cout最大值为 : iendl; for(i=0;in-1;i+) cout第 i+1 层的第 Ci+1 个数 AiCi ; cout第 i+1 层的第 Ci+1 个数 AiCiendl;/ 背包问题.cpp : 定义控制台应用程序的入口点。/#include stdio.h#includeusing namespace std;#define N 200#define C 1000int WN;int PN;int LN;int BagMax(int n,int c) int i,j,k=0; int VNC; for(i=0;i=n;i+) Vi0=0; for(i=1;i=c

17、;i+) V0i=0; for(i=1;i=n;i+) for(j=1;jj) Vij=Vi-1j; else if(Pi-1+Vi-1j-Wi-1)=0;i-) if(Vij!=Vi-1j) Lk=i; k+; j=j-Wi-1; return Vnc;void main() int i,n,c; coutn; coutc; for(i=0;in;i+) cout请输入第 i+1Wi; cout请输入第 i+1Pi; i=BagMax(n,c); cout可以装货的最大价值为 : iendl; cout其中拿货方案为 :endl; for(i=0;Li!=0;i+) cout第 Li 个物品

18、 ; coutendl;/ 校园导航问题.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include using namespace std;#define N 20char nameN20;int ANN;int DNN;int BN;int CN;int menu(int n) int i; system(cls); cout_endl; cout 校园导航软件endlendl; for(i=0;in;i+) cout i+1 : nameiendl; i=0; cout_endl; while(in) coutendli; return i-1;int

19、input() int i,j,n=0; while(n20 |n=0) coutn; coutendl; for(i=0;in;i+) cout请输入第 i+1namei; for(i=0;in;i+) Aii=RAND_MAX; for(j=i+1;jn;j+) cout请输入 namei 与 namej 的距离endl; coutAij; if(Aij=0) Aij=RAND_MAX; Aji=Aij; return n;int find(int a,int b,int n) int k=a,min=0,l=a,i,j,d=b; for(i=0;in;i+) Ci=-1; if(a=b)

20、 return 0; for(i=0;in;i+) Bi=i; for(j=0;jn;j+) Dij=RAND_MAX; while(k!=b) for(j=0;jn;j+) if(Akj!=RAND_MAX) Dkj=Akj+min; Bk=-1; min=RAND_MAX; for(j=0;jn;j+) if(Bj=-1) continue; for(i=0;in;i+) if(Dijmin) min=Dij; l=j; k=l; min=RAND_MAX; for(j=0;jn;j+) if(Djbmin) min=Djb; k=b; i=0; Ci=k; while(k!=a) l=R

21、AND_MAX; Ci=k; i+; for(j=0;jDjk) d=j; l=Djk; k=d; Ci=k; return min;void main() int n=input(); int a=menu(n),b=menu(n); system(cls); int i=find(a,b,n); coutnamea 到 nameb 的最短路径为 ; coutiendl; cout0;i-) if(Ci=-1) continue; coutnameCi ; coutnameCiendl;/ 餐厅找零问题.cpp : 定义控制台应用程序的入口点。/#include stdio.h#includ

22、e using namespace std;int M9;int MM9=500,200,100,50,20,10,5,2,1;int change(float money) int tM=10*(100-money); int i=0,k=0; if(money100 | money =0) return -1; for(i=0;i9;i+) Mi=0; for(i=0;i9;i+) Mi=tM/MMi; tM=tM-Mi*MMi; k+=Mi; return k;void main() float m; int k,i; coutm; k=change(m); cout一共找你 k 张钱endl; for(i=0;i6;i+) if(Mi=0) continue; coutMi 张 MMi/10 元的endl; for(i=6;i9;i+) if(Mi=0) continue; coutMi 张 MMi 角的endl; / party幸运人士.cpp : 定义控制台应用程序的入口点。/#include stdio.h#include using namespa

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1