运筹学课程设计报告书-最小生成树问题_第1页
运筹学课程设计报告书-最小生成树问题_第2页
运筹学课程设计报告书-最小生成树问题_第3页
运筹学课程设计报告书-最小生成树问题_第4页
运筹学课程设计报告书-最小生成树问题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、运筹学课程设计报告书 专业 班级 学号 姓名 LMZZ 日期 2011.09.01 设计题目:最小生成树问题设计方案:本设计是在C语言环境下运行的,主要有:minitree_KRUSKAL()此函数包含几个算法有对树的邻接矩阵的构造,数据的输入,克鲁斯卡尔算法(又称Kruskal算法,其类似于求生成树的“避圈法”)求网的最小生成树,最小生成树的最小代价,输出最小生成树的顶点及其最小代价。ljjzprint(int n)定义并输出邻接矩阵。主程序:int main() minitree_KRUSKAL(); (函数调用)printf(输出邻接矩阵是:n);ljjzprint(n); (函数调用)

2、方案实施: 1、定义结构体以及各个变量; 2、数据的输入; 3、采用克鲁斯卡尔算法求出该图的最小生成树; 4、采用邻接矩阵做储存结构创建图; 5 、在主函数中分别调用以上各个函数,最终实现设计目的。克鲁斯卡尔算法的表示:while (i n) min=INFINITE; for (j=0;j m;j+) if (ej.weight min&ej.flag=0) min=ej.weight; sum+=min;k=j; if (tek.vexh.jihe!=tek.vext.jihe) ek.flag=1; for (j=1;j =n;j+) if (tj.jihe=tek.vext.jihe)

3、 tj.jihe=tek.vexh.jihe; tek.vext.jihe=tek.vexh.jihe; i+; else ek.flag=2; 邻接矩阵的表示:void ljjzprint(int n)/*定义并输出邻接矩阵*/ int i,j;for(i=1;i=n;i+)for(j=1;j=n;j+) printf(%dt,adjmatrixij);printf(n); int main() minitree_KRUSKAL(); 函数调用printf(输出邻接矩阵是:n);ljjzprint(n); 输出矩阵return 0;调试过程:原设计在定义输出矩阵函数时,没有形参,在调用时必须

4、输入树的定点数这和前面的函数在输入树的数据时重复操作,为了避免重复如果这个函数添加一个参数为n的形参,再main函数调用minitree_KRUSKAL();后n为定值,n为了在ljjzprint(n)中为已知量则需在程序的开头定义一个全局变量n即可。在求最小生成树的代价时,因为其顶点的权值时变的 故重新定义个变量sum,以实现其权值的相加然后输出。结果与结论:测试结果:顶点为:a,b,c, d , e其标号分别为1,2,3,4,5Vexh和vext分别为边的两端顶点,weight为边的权值运行如下:结论:通过实际操作,运用简单的C语言程序编程能比较清楚和简单的把运筹学当中的相对抽象的最小树问

5、题表现出来。具体分工:我主要负责程序后期的修改以及调试,才能使整个程序正常的运行出来。还有对ppt的制作和课程设计书整体的把握!收获与致谢:紧张而又忙碌的课设学习终于结束了,在本次课设中我们也取得了相对很大的成就,通过本次课程设计我们也学到了很多,它增加了我们编程软件的兴趣,在具体操作中对所学的C语言的理论知识得到了巩固,达到实训的目的也发现了自己的不足之处,在以后的上机中应更加注意,同时体会到了C语言具有语句简洁,使用灵活,执行效率高等特点,并且通过此次运筹学课程设计,我们通过C语言将其中抽象的最小树问题比较直观的变现出来,掌握了求最小树问题的克鲁斯卡尔算法以及邻接矩阵的构造,特别是对C语言

6、中数组和循环有了深刻的了解。通过实际操作将C语言编程和运筹学有机的结合起来,学会了C语言编程的基本步骤和基本方法,开发了自己的逻辑思维能力,培养了分析问题和解决问题的能力。在此衷心感谢学院安排这次课设,让我们又多了一次学习交流的机会,更好的巩固了所学的知识,拓展了知识面。本次课设能取得成功,要感谢老师的帮助和指导。在课设期间老师帮助我们分析思路,提供方法,才使得我们的程序做的更加的完善。其次是要感谢和我同组的同学感谢对方对本次课设的付出。参考文献:运筹学教程(第三版)胡运权主编C程序设计(第三版)谭浩强编著C程序设计题解与上机指导(第三版)谭浩强编著 附件:本设计的详细代码如下:#includ

7、e #define M 30 #define INFINITE 9999 #define n0 100int adjmatrixn0+1n0+1;int n;typedef struct char data; int jihe; VEX; typedef struct int vexh,vext; int weight; int flag; EDGE; void minitree_KRUSKAL() int i,m,min,k,j;int sum=0;VEX tM; EDGE eM; printf(最小生成树问题n);printf(程序设计者:冯云广,吕金刚n);printf(输入顶点数及边数

8、:); fflush(stdin);scanf(%d%d,&n,&m); /n个点 m条边printf(输入各个顶点名称:n);for (i=1;i =n;i+) printf(t%d.data=:,i); /输入顶点字符getchar(); fflush(stdin); /清除缓存scanf(%c,&ti.data); / 输入点对应的字符ti.jihe=i; printf(输入两个不同顶点及其边权:n);for(i=1;i=m;i+)for(j=1;j=m;j+)adjmatrixij=0;for (i=0;i 0)adjmatrixei.vexhei.vext=1;adjmatrixei

9、.vextei.vexh=1;ei.flag=0; i=1; while (i n) min=INFINITE; for (j=0;j m;j+) if (ej.weight min&ej.flag=0) min=ej.weight; k=j; if (tek.vexh.jihe!=tek.vext.jihe) ek.flag=1; for (j=1;j =n;j+) if (tj.jihe=tek.vext.jihe) tj.jihe=tek.vexh.jihe; tek.vext.jihe=tek.vexh.jihe; i+; else ek.flag=2; printf(克鲁斯卡尔算法及代价如下:n);for (i=0;i m;i+) if (ei.flag=1) printf(%d,%d) %dn,ei.vexh,ei.vext,ei.weight); sum+=ei.weight;printf(最小生成树的权是:);printf(%dn,sum); void ljjzprint(int n)/*定义并输出邻接矩阵*/int i,j;for(i=1;i=n;i+)for(j=1;j=n;j+)printf(%dt,adjmatrix

温馨提示

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

最新文档

评论

0/150

提交评论