- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最小生成树数据结构实验报告.
数
据
结
构
实
验
报
告
名 称:最小生成树
班 级:122
姓 名:*****
学 号:***********
指导老师:********
一、设计目的与任务问题描述: 已知一个无向连通网表示n个城市以及城市间可能设置的通信线路,其中网的顶点表示城市,边表示两个城市之间的线路,赋于边上的权值表示相应的代价。对于n个点的连通网能建立许多不同的生成树,每一棵生成树都可以是一个通信网。我们要选择一棵生成树,使总的耗费最小。设计方案构造最小生成树的方法:最初生成树为空,即没有一个结点和一条边,首先选择一个顶点作为生成树的根,然后每次从不在生成树中的边中选择一条权值尽可能小的边,为了保证加入到生成树中的边不会造成回路,与该边邻接的两个顶点必须一个已经在生成树中,一个则不在生成树中,若网中有n个顶点(这里考虑的网是一个连通无向图),则按这种条件选择n-1边就可以得到这个网的最小生成树了。详细的过程可以描述为:设置2个集合,U集合中的元素是在生成树中的结点,V-U集合中的元素是不在生成树中的顶点。首先选择一个作为生成树根结点的顶点,并将它放入U集合,然后在那些一端顶点在U集合中,而另一端顶点在V-U集合中的边中找一条权最小的边,并把这条边和那个不在U集合中的顶点加入到生成树中,即输出这条边,然后将其顶点添加到U集合中,重复这个操作n-1次。
弧v,w的意义或信息}
2.4邻接矩阵定义模块代码
typedef struct ArcCell{
int adj; char *info;
}ArcCell,AdjMatrix[20][20];
typedef struct {
char vexs[20]; AdjMatrix arcs;
int vexnum,arcnum;
}MGraph_L;
int localvex(MGraph_L G,char v)
{ int i=0; while(G.vexs[i]!=v) { ++i;} return i;}
用typedef struct定义邻接矩阵,通过二维数组来存储邻接矩阵,并设定参数的最大值为20。
2.5创建邻接矩阵模块代码
int creatMGraph
(
MGraph G
)
{
char v1,v2;
int i,j,w;
printf(建立邻接矩阵:\n);
printf(请输入图G顶点(城市)和弧(边)的个数:);
scanf(%d,G.vexnum);
scanf(%d,G.arcnum);
printf(输入所有顶点:);
for(i=0;iG.vexnum;++i)
{
cinG.vexs[i];
}
for(i=0;iG.vexnum;i++)
for(j=0;jG.vexnum;j++)
{
G.arcs[i][j].adj=int_max;
G.arcs[i][j].info=NULL;
}
printf(输入所有边及依附的顶点(城市)和权(距离):\n);
for(int k=0;kG.arcnum;k++)
{
cinv1v2w;
i=localvex(G,v1);
j=localvex(G,v2);
G.arcs[i][j].adj=w;
G.arcs[j][i].adj=w;
}
ljjzprint(G);
printf(图G邻接矩阵创建成功!\n);
return G.vexnum;
}
该语句是从键盘输入顶点数和边数,输入顶点和权值,通过循环语句的调用,最后调用creatMGraph_L()创建连接矩阵 。
2.6最小生成树kruskal算法及代价模块代码
void MiniSpanTree(MGraphA *D)//生成最小生成树
{
int i, j, n, m, SUM=0; int k = 1;
int parent[M]; edge edges[M];
for ( i = 1; i D-vexnum; i++)
{
for (j = i + 1; j = D-vexnum; j++){ if (D-arc[i][j].adj == 1)
{
edges[k].begin = i; edges[k].end = j;
edges[k].weight = D-arc[i][j].weight; k++;}
}
}
sort(edges, D);
for (i = 1; i = D-arcnum; i++)
{
parent[i] = 0;
}
printf(最小生成树为:\n);
for (i =
您可能关注的文档
- 最基础的钢筋平法配筋计算实例..doc
- 最大值问题和两个重要的极限..doc
- 最大利用率防反光黑板..doc
- 最大功率跟踪原理及控制方法..doc
- 最大功率跟踪控制方法及装置..doc
- 最大加工直径为500毫米的经济型数控车床进给系统设计..doc
- 最大摄氧量(VO2max)直接测定法..doc
- 最大加工直径为Ф400mm普通车床主轴变速箱设计..doc
- 最大李雅谱诺夫指数的数值计算..doc
- 最大化地利用高速放大器电路..doc
- 精品解析:山东省济宁市2023-2024学年高一下学期期末考试政治试题(原卷版).docx
- 高中思想政治课教师课堂提问:问题剖析与优化策略.docx
- 碳纳米管(CNTs)超疏水复合材料的制备与光致驱动应用研究.docx
- 保定市曲阳县中学阳光体育运动的现状剖析与发展策略研究.docx
- 基于静止卫星的火点识别与燃烧排放估算:方法探索与实践.docx
- 青岛SX轮胎公司应收账款管理优化策略研究:基于风险防控与效率提升.docx
- 三维构架硅纳米线生长定位集成及薄膜晶体管制备的关键技术与应用探索.docx
- 初中信息技术课堂中任务驱动法的实践与创新探索.docx
- 糖尿病健康教育路径:提升合并糖尿病外科手术患者预后的关键策略.docx
- 荷人肝癌裸鼠皮下移植瘤模型:基于MR成像与病理对照的深度剖析.docx
文档评论(0)