欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

    离散数学--最小生成树实验报告.docx

    • 资源ID:12247892       资源大小:43.80KB        全文页数:9页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    离散数学--最小生成树实验报告.docx

    .1、 实验目的:掌握图的存储表示和以及图的最小生成树算法。二、实验内容:1. 实现图的存储,并且读入图的内容。2. 利用克鲁斯卡尔算法求网络的最小生成树。3. 实现构造生成树过程中的连通分量抽象数据类型。4. 以文本形式输出对应图的最小生成树各条边及权值。三、实验要求:1 在上机前写出全部源程序;2 能在机器上正确运行程序;3 用户界面友好。需求分析:1、利用克鲁斯卡尔算法求网的最小生成树;2、以用户指定的结点为起点,分别输出每种遍历下的结点访问序列;3、输入为存在边的顶点对,以及它们之间的权值;输出为所得到的邻接矩阵以及按权排序后的边和最后得到的最小生成树;克鲁斯卡尔算法:假设 WN=(V,E) 是一个含有 n 个顶点的连通网,按照构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至只有一棵树,也即子图中含有 n-1条边为止。 测试数据: 自行指定图进行运算四、详细设计 源程序#include<stdio.h>#include<stdlib.h>#define M 20#define MAX 20typedef struct int begin; int end; int weight;edge;typedef struct int adj; int weight;AdjMatrixMAXMAX;typedef struct AdjMatrix arc; int vexnum, arcnum;MGraph;void CreatGraph(MGraph *); void sort(edge* ,MGraph *);void MiniSpanTree(MGraph *);int Find(int *, int );void Swapn(edge *, int, int);void CreatGraph(MGraph *G) int i, j,n, m; printf("请输入边数和顶点数:"); scanf("%d %d",&G->arcnum,&G->vexnum); for (i = 1; i <= G->vexnum; i+) for ( j = 1; j <= G->vexnum; j+) G->arcij.adj = G->arcji.adj = 0; for ( i = 1; i <= G->arcnum; i+) printf("n请输入有边的2个顶点"); scanf("%d %d",&n,&m); while(n < 0 | n > G->vexnum | m < 0 | n > G->vexnum) printf("输入的数字不符合要求 请重新输入:"); scanf("%d%d",&n,&m); G->arcnm.adj = G->arcmn.adj = 1; getchar(); printf("n请输入%d与%d之间的权值:", n, m); scanf("%d",&G->arcnm.weight); printf("邻接矩阵为:n"); for ( i = 1; i <= G->vexnum; i+) for ( j = 1; j <= G->vexnum; j+) printf("%d ",G->arcij.adj); printf("n"); void sort(edge edges,MGraph *G) int i, j; for ( i = 1; i < G->arcnum; i+) for ( j = i + 1; j <= G->arcnum; j+) if (edgesi.weight > edgesj.weight) Swapn(edges, i, j); printf("权排序之后的为:n"); for (i = 1; i < G->arcnum; i+) printf("<< %d, %d >> %dn", edgesi.begin, edgesi.end, edgesi.weight); void Swapn(edge *edges,int i, int j) int temp; temp = edgesi.begin; edgesi.begin = edgesj.begin; edgesj.begin = temp; temp = edgesi.end; edgesi.end = edgesj.end; edgesj.end = temp; temp = edgesi.weight; edgesi.weight = edgesj.weight; edgesj.weight = temp; void MiniSpanTree(MGraph *G) int i, j, n, m; int k = 1; int parentM; edge edgesM; for ( i = 1; i < G->vexnum; i+) for (j = i + 1; j <= G->vexnum; j+) if (G->arcij.adj = 1) edgesk.begin = i; edgesk.end = j; edgesk.weight = G->arcij.weight; k+; sort(edges, G); for (i = 1; i <= G->arcnum; i+) parenti = 0; printf("最小生成树为:n"); for (i = 1; i <= G->arcnum; i+) n = Find(parent, edgesi.begin); m = Find(parent, edgesi.end); if (n != m) parentn = m; printf("<< %d, %d >> %dn", edgesi.begin, edgesi.end, edgesi.weight); int Find(int *parent, int f) while ( parentf > 0) f = parentf; return f;int main(void) MGraph *G; G = (MGraph*)malloc(sizeof(MGraph); if (G = NULL) printf("memory allcation failed,goodbye"); exit(1); CreatGraph(G); MiniSpanTree(G); system("pause"); return 0;运行结果:五、实验总结(结果分析和体会)在编程时,因为考虑的情况比较多,所以容易造成错误和遗漏,为了避免这些问题的出现,可以先用笔把所有的程序在纸上,然后再根据列表编写程序,这样不仅简单易懂,还避免了一些不必要的错误。编写完程序后进行调试,发现有很多错误,其中也不乏一些基本的小错误,所以程序写完后进行静态检查是必不可少的,其次是逻辑上的错误,对于这些错误,只能再认真检查整个程序,这就要求我们在编程时考虑要周到,或者可以请其他同学帮忙检查。通过这次对算术表达式求值的设计,让我自己对克鲁斯卡尔算法的运用更深刻,能够基本上很好的运用克鲁斯卡尔算法来解决一些问题。不过从中也发现了很多问题,那就是虽然课本知识的掌握还不错,但是上机编程的能力还有所匮乏,应该加强这方面的锻炼,通过上机的实践来提升对基础知识的理解。还有就是应该多和同学交流,比如一个相同的问题,我有我的编程思路,他有他的,通过相互的交流、讨教,可以获得更广的知识信息,开拓思维,自己不懂的通过咨询就可以掌握。;.

    注意事项

    本文(离散数学--最小生成树实验报告.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开