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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

石大《数据结构课程设计》Word格式文档下载.docx

1、1. 至少包含10个城市;2. 城市数n由键盘录入;3. 城市坐标由随机函数产生小于100的整数;4. 输出生成树中各条边以及它们的权值;5. 利用克鲁斯卡尔算法求网的最小生成树。6. 实现并查集。以此表示构造生成树过程中的连通分量。7. 以文本形式输出生成树中各条边以及他们的权值。2概要设计 1、边集数组的类型定义:typedef struct int x, y; int w;edge;x表示起点,y表示终点,w为权值。2、并查集功能的实现由以下函数实现:Make_Set(int x)初始化集合;Find_Set(int x) 查找x元素所在的集合,回溯时压缩路径;Union(int x,

2、int y, int w)合并x,y所在的集合。克鲁斯卡尔算法的实现该算法的实现位于主函数中: qsort(e, n, sizeof(edge), cmp); /将边排序 printf(最小生成树的各条边及权值为:n); for (i = 0; i n; i+) x = Find_Set(ei.x); y = Find_Set(ei.y); if (x != y ) printf(%c - %c : %dn, ei.x + A, ei.y + , ei.w); Union(x, y, ei.w); 4、设计中还包含以下函数:/* 比较函数,按权值(相同则按x坐标)非降序排序 */int cmp

3、(const void *a, const void *b) if (*(edge *)a).w = (*(edge *)b).w) return (*(edge *)a).x - (*(edge *)b).x; return (*(edge *)a).w - (*(edge *)b).w;5、主程序的流程图 3详细设计 #include #include #include time.h#define MAX 435/* 定义边(x,y),权为w */edge eMAX;/* rankx表示x的秩 */int rankMAX;/* fatherx表示x的父节点 */int fatherMAX;

4、/* 初始化集合 */void Make_Set(int x) fatherx = x; rankx = 0;/* 查找x元素所在的集合,回溯时压缩路径 */int Find_Set(int x) while(fatherx) x=fatherx; return x;/* 合并x,y所在的集合 */void Union(int x, int y, int w) if (x = y) return; /* 将秩较小的树连接到秩较大的树后 */ if (rankx ranky) fathery = x; else if (rankx = ranky) ranky+; fatherx = y;/*

5、主函数 */int main() printf(*最小生成树问题: int i, n,h,k=0; char chx, chy;n人为输入权值请输入1,随机生成权值请输入0: scanf(%d,&k); if(k=1) /* 读取边的数目 */请输入边的条数(小于436): scanf(, &n); getchar(); /* 读取边信息并初始化集合 */请输入边的信息(起点,终点,权值(100)分别用空格隔开:%c %c %dchx, &chy, &ei.w); getchar(); ei.x = chx - ; ei.y = chy - Make_Set(i); else请输入顶点数(=3

6、0):h); srand( (unsigned)time( NULL ) ); n=(h-1)*h/2;chx=49;chy=50; for( i = 0;i+ ) ei.w=rand()%100+1; ei.x = chx - if(chy=h+48) chx+; ei.y = (chy+) - if(chy=h+49) chy=chx+1;随机生成的各条边及权值为: /* 将边排序 */ return 0;1、边集数组的类型定义:3、克鲁斯卡尔算法的实现(1)/* 比较函数,按权值(相同则按x坐标)非降序排序 */(2)快排函数qsort,包含在stdlib.h头文件里(3)C语言提供的随机数函数srand( unsigned int seed );使用随机数函数如下:srand( (unsigned)time( NULL ) );输出1100之间的随机数,使用rand()%100+1。4程序测试1、打开界面:(1)人为输入权值,输入1,回车:输入7,回车:输入边的信息及结果如下:(2)随机生成权值,输入0:输入顶点数5,结果如下:5感想与体会通过本次课程设计,我学会了利用克鲁斯卡尔算法求最小生成树。另外学会了利用随机函数产生随机数,以及课本没有提到的边集数组的定义和使用。

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

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