




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验九 图的最小生成树算法的实现实验预备知识:1理解图最小生成树的意义和相应算法。2掌握带权图的存储结构。一、实验目的1使学生熟悉最小生成树的算法实现。2掌握带权图的存储结构和处理方法。二、实验环境 硬件:每个学生需配备计算机一台。操作系统:DOS或Windows; 软件:DOS或Windows操作系统+Turbo C; 三、实验要求1能够独立完成带权图的存储和最小生成树的生成四、实验内容1在自己的U盘的“姓名+学号”文件夹中创建“实验9”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。2现在某电信公司要对如下图的几个城市之间进行光纤连接布线,请用合适的存储结构将下图存储到计算机中方便
2、进行处理。3现在公司想以最小的代价将所有城市连通,方便所有城市间通信,请用普里姆算法和克鲁斯卡尔算法实现本图的最小生成树#include <stdio.h>#include <stdlib.h>#define INF 50typedef struct ArcNodeint adjvex; /该弧所指向的顶点位置struct ArcNode *nextarc; /下一个临接点int weight; /弧的权重ArcNode; /表结点typedef structVNodechar data; /顶点信息ArcNode *firstarc; /指向下一个结点VNode,Ad
3、jList6;typedef structAdjList LH; /创建头结点数组int vexnum; /图的点的个数int arcnum; /图的边的个数 Graph;typedef struct char nextvex;int lowcost;int know;Auxiliary_array; /辅助数组结构体void main (void)void buildtu (Graph*);void printgraph(Graph*);void prim( Graph *G, char u); char u;Graph UDG;Graph *G = &UDG;buildtu(G);
4、printgraph(G); /打印图printf("请输入起始顶点:n");while(getchar()!='n');u = getchar();prim(G ,u); void buildtu (Graph *G) /建图int search(Graph *G,char a);int i,n1,n2,w;char a,b;ArcNode *p, *q; printf("请输入顶点个数和边的条数:n"); scanf("%d %d",&G->vexnum,&G->arcnum); pri
5、ntf("请输入顶点信息n"); for (i = 0; i < G->vexnum; +i)while (getchar()!='n'); scanf("%c",&G->LHi.data); G->LHi.firstarc = NULL; printf("请输入有关系的结点和该边的权重:n");for(i=0;i<G->arcnum;+i)while (getchar()!='n'); scanf("%c %c %d",&a,&a
6、mp;b,&w);n1=search(G,a);n2=search(G,b); p=G->LHn1.firstarc;if(p = NULL) p=G->LHn1.firstarc=(ArcNode *) malloc (sizeof(ArcNode);elsewhile( p->nextarc !=NULL )p=p->nextarc;p=p->nextarc=(ArcNode *) malloc (sizeof(ArcNode);q=G->LHn2.firstarc;if(q = NULL) q=G->LHn2.firstarc=(ArcN
7、ode *) malloc (sizeof(ArcNode);elsewhile( q->nextarc !=NULL )q=q->nextarc;q=q->nextarc=(ArcNode *) malloc (sizeof(ArcNode);p->adjvex=n2; p->weight=w;p->nextarc=NULL;q->adjvex=n1;q->weight=w;q->nextarc=NULL;int search (Graph *G,char a) /确定顶点a在头结点数组中的位置int i;for(i=0;i<G-&
8、gt;vexnum;+i)if(G->LHi.data=a)return i;void printgraph(Graph *G) /打印图int i; ArcNode *p;for (i=0 ; i < G->vexnum; +i)p=G->LHi.firstarc;printf("data:%c t",G->LHi.data);while(p!=NULL)printf("firstarc->adjvex=%d",p->adjvex);p=p->nextarc;printf("n");v
9、oid prim( Graph *G, char u)/用prim算法实现最小生成树int search (Graph *G,char a);int minimize(Graph *G, Auxiliary_array);void printtable(Auxiliary_array);Auxiliary_array A6; /创建辅助数组int i,j,seat;int location;ArcNode *p ;for (i = 0; i < G->vexnum; +i) Ai.nextvex = '0'Ai.know = 0;Ai.lowcost = INF;
10、location = search(G ,u);/确定u元素在头结点数组中的位置for (p=G->LHlocation.firstarc ; p != NULL; p=p->nextarc )i = p->adjvex;Ai.nextvex = G->LHlocation.data; Ai.lowcost = p->weight;Ai.know = 0;Alocation.know = 1;Alocation.lowcost = 0;Alocation.nextvex = '0' for(j=0;j<G->vexnum-1;+j)se
11、at = minimize( G,A );printf("select min: %dn", seat); Aseat.know = 1;p=G->LHseat.firstarc; for (p; p != NULL; p=p->nextarc) i=p->adjvex; if(Ai.know = 0 && p->weight < Ai.lowcost) Ai.nextvex = G->LHseat.data; Ai.lowcost = p->weight; printtable(A); /打印辅助数组中的信息for
12、 (j = 0; j < G->vexnum; +j)if (j != location)printf("%c<->%cn",Aj.nextvex,G->LHj.data);int minimize(Graph *G, Auxiliary_array A)/取出辅助数组中权值最小的顶点所在的位置int i,place,num;num = INF;for (i = 0; i < G->vexnum; +i)if(Ai.know = 0 && num >= Ai.lowcost)num = Ai.lowcost;place = i;return place;void printtable(Auxiliary_array A) /打印辅助数组int i;for (i = 0; i < 6; i+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国锂电池正极材料市场发展趋势及投资战略研究报告
- 2025-2030年中国铝冶炼行业运行动态与前景趋势分析报告
- 2025-2030年中国菱镁矿产业竞争格局与十三五规划研究报告
- 2025-2030年中国联苯双酯行业市场运行状况与十三五规划分析报告
- 2025-2030年中国粘玉米行业规模分析及发展建议研究报告
- 2025-2030年中国空管系统市场十三五规划与投资战略研究报告
- 2025-2030年中国畜禽养殖中抗生素行业发展状况及投资战略研究报告
- 东北财经大学《中医护理学基础》2023-2024学年第二学期期末试卷
- 广东江门幼儿师范高等专科学校《面向对象与可视化编程》2023-2024学年第二学期期末试卷
- 广州工商学院《健康服务与营销学》2023-2024学年第二学期期末试卷
- 《绿色建筑设计原理》课件
- 中华人民共和国学前教育法-知识培训
- 2023年新高考(新课标)全国2卷数学试题真题(含答案解析)
- 事业单位工作人员奖励审批表
- 人教版六年级美术下册全册课件【完整版】
- GB/T 9788-1988热轧不等边角钢尺寸、外形、重量及允许偏差
- 教科版三年级下册科学全册完整课件
- 轨道交通安全专题培训
- 物理化学完整版答案
- 节流孔板孔径计算
- 学生流失率考核办法(试行)
评论
0/150
提交评论