- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构,最小生成树克鲁斯卡尔算法的实现
摘 要
设计一个,该操作简单,界面清晰,易于为用户所接受。
关键词:1 课题描述 1
2 问题分析和任务定义 2
3 逻辑设计 3
4 详细设计 4
5 程序编码 10
6 程序调试与测试 16
7 结果分析 18
8 总结 19
参考文献 20
1课题描述
用C/C++编写程序实现克鲁斯卡尔最小生成树算法。假设要在n个城市之间建立通讯联络网,则连通n个城市只需要n-1条线路。这是我们设计一个最小生成树的程序用来算出最节省经费的前提下建立这个通信站。2问题分析和任务定逻辑设计
1).定义结构体。
2).采用邻接矩阵做存储结构创建图(函数模块一)。
3).采用克鲁斯卡尔算法求出该图的最小生成树(函数模块二)。
4).在主函数里面分别调用以上各个函数,最终实现设计目的。
4详细设计程序结构CreateMGraph
用来实现图的创建,以及图的相关信息的存储。图的存储采用邻接矩阵存储结构。
·函数minitree_KRUSKAL
用来求图的最小生成树。图的最小生成树有普利姆算法和克鲁斯卡尔算法可以实现,本段代码使用的是克鲁斯卡尔算法,这也是本题所要求使用的。
·各个函数间的联系
先调用函数CreateMGraph实现图的创建,然后调用函数minitree_KRUSKAL求出该图的最小生成树
4.2.设计说明#define QueueSize 30
#define M 30
·模块一:图的创建
·结构体定义为:
typedef struct
{
VertexType vexs[MaxVertexNum]; //顶点表
Link edges[MaxVertexNum][MaxVertexNum]; //图中当前的相连接的两个顶点
int n,e; //图中当前的顶点数和边数
}MGraph;
·函数定义为:
MGraph CreateMGraph()
{
MGraph G;
int i,j,k,ch3;
char ch1,ch2;
printf(请输入该图的顶点数和边数:\n);
scanf(%d,%d,(G.n),(G.e));
printf(请输入该图的顶点信息:\n);
for(i=1;i=G.n;i++)
{
getchar();
scanf(%c,(G.vexs[i]));
}
for(i=1;i=G.n;i++)
for(j=1;j=G.n;j++)
G.edges[i][j].w=0;
printf(请输入该图每条边对应的两个顶点的名称:\n);
for(k=1;k=G.e;k++)
{
scanf(%c,ch1);
printf(请输入第%d条边的顶点序号:,k);
scanf(%c %c,ch1,ch2);
printf(请输入第%d条边的权值大小:,k);
scanf(%d,ch3);
for(i=1;ch1!=G.vexs[i];i++);
for(j=1;ch2!=G.vexs[j];j++);
e[p].vexh=i;
e[p].vext=j;
e[p].weight=G.edges[i][j].w=ch3; //权值
e[p].flag=0;
p++;
}
return G;
}
流程如图4.1所示
创建图使用的是函数MGraph CreateMGraph(),该图的存储结构是邻接矩阵,先对图的结构体进行定义,再进行初始化。在函数中需要手动输入图的参数(如顶点数、边数、顶点信息、相连接的顶点、边的权值等)用来建立图并且确定图的邻接矩阵。最后在完成图的信息输入即建立图以后输出图的邻接矩阵表。
·模块二:求图的最小生成树。
void minitree_KRUSKAL(MGraph *G)
{
int i,min,j,k;
VEX t[M];
for(i=1;i=G-n;i++)
{
t[i].data=G-vexs[i];
t[i].jihe=i;
}
i=1;
while (iG-n)
{
min=MaxVertexNum;
for (j=0;jG-e;j++)
{
if (e[j].weightmine[j].flag==0)
{
min=e[j].
您可能关注的文档
- 探究酵母菌的呼吸方式-sun.pptx
- 控爆会汇报.pptx
- 推进宣传(三十七)-工具使用介绍系列-4MSA(.ppt
- 提高水泥稳定砂砾石基层质量QC.pptx
- 提高化学封堵措施成功率--QC.ppt
- 插值与拟合-2012.ppt
- 控制交换网络中的广播流量(v2.0).ppt
- 接入层数据设备培训.pptx
- 摄影景点分享:台湾特色海岸大集合.pptx
- 揭阳华侨中学高一物理《精讲活用》.doc
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
文档评论(0)