版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《面向对象程序设计》课程设计报告PAGE2/7《数据结构》课程设计报告题目:畅通工程专业:数字媒体技术班级:数字151姓名:学号:指导教师:成绩:
目录1问题描述22问题分析33程序设计44程序代码55参考文献66程序设计与运行结果1、设计内容及要求1.问題描述
某省调查乡村交通状况禍到的统计表中列出了任意两村庄间的距离。省政府”畅通工程”的目标是使全省負何两个村庄间都可以实现公路交通但不一定有直接的公路相
连.只要能间接通过公路可达即可,请设计一个方案,在哪些村庄之间修路才能使铺设的
公路总长度最小,并计算最小的公路总长度。
2、问题分析
假设以每个村庄为顶点,村庄之间的道路为边,可以用一个图来表示各个村庄之间的
交通道路情况。因为任何两个村庄之间都可以修路,所以有n个村庄就可以修n(n-l)/2
条道路。显然这是一个完全无向图,根据图的连通性可知,N个村庄之间只要修n一1条
道路就能保证各个村庄之间是相通的,那么如何在这n(n一1)/2条道路中选择n一1条
呢?这个问题就转化为求连通图的最小生成树问题。求最小生成树有两种方法:Prim
算法和Kruskal算法。Prim算法适合求稠密图;Kuskal算法适合求稀疏图。本问题涉及的边数较多,因此选用Prim算法比较台适。
3、程序设计
选用邻接表作为图的存储结构,每个村庄作为图中的顶点,为了运算方便,给每个村
庄一个编号,边表示两个村庄之间的道路,道路的长度作为边上的权值。深入浅出数据结构与算法涉及的边数较多,因此选用Prim算法比较合适。
/*图的邻接表存储结构
*/
#define
MAXN
100
struct
ArcNode
/*
定义邻接表的边结构*
/
{int
adjvex,info;
/*adjvex是顶点编号,info表示边的长度*/
struct
ArcNode
*nextarc;
/*
指向下一条边。/
};
struct
VNode/*定义邻接表的顶点向量*/
{int
data;
ArcNode
*
firstarc;/*
指向第一条边大/
}AdjList[MAXN];
输入设计:
第一行给出村庄数目N(<100),当N为0时,输入结束。随后的
N(N-
1)/2行对应村庄间的距离,每行给出一对正整数(分别是两个村庄的编号)以及两村庄间的距离,村庄从1到N
编号。
输出设计:
输出应建设的每一条道路的村庄编号及距离,并输出应建设道路的最短距离。
基本操作:
Init():
初始化界面设计。
Input():
输人两个村庄的编号及之间的距离。
join(VNode
*
a,int
b,int
c):
输人数据建立邻接表。
Prim():
运用Prim
算法求最小生成树。
main():
主函数。
4.程序代码
#include<stdio.h>#include<limits.h>#include<string.h>#include<windows.h>#defineMAXN100intn,m,visit[MAXN+5],low[MAXN+5];inti,a,b,c,length=0;structArcNode{ intadjvex,info; structArcNode*nextarc;};structVNode{ intdata; ArcNode*firstarc; }AdjList[MAXN];voidInit(){ printf("************畅通工程********************"); printf("请输入村庄数目N:(N<100)\n\n");}voidjoin(VNode*a,intb,intc){ ArcNode*p,*q; p=newArcNode; p->adjvex=b;p->info=c;p->nextarc=NULL; q=a->firstarc; a->firstarc=p; p->nextarc=q;}voidInput(){ scanf("%d",&n); m=n*(n-1)/2; printf("\n请输入对应村庄间的距离:\n"); printf("格式:村庄A的编号村庄B的编号两村庄间的距离\n"); printf("共%d行\n",m); for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); join(&AdjList[a],b,c); join(&AdjList[b],a,c); }}voidPrim(){ inti,j,pos,min,length=0; ArcNode*p; printf("\n使用Prim算法计算其最小生成树并输出边\n\n"); system("pause"); puts(""); memset(visit,0,sizeof(visit)); visit[1]=-1; pos=1; for(i=2;i<=m;i++) { low[i]=INT_MAX; visit[i]=1; } p=AdjList[1].firstarc; while(p!=NULL) { low[p->adjvex]=p->info; p=p->nextarc; } for(i=1;i<n;i++) { min=INT_MAX; for(j=1;i<=n;j++) { if(visit[j]!=-1&&low[j]<min) min=low[j]; pos=j; length+=min; printf("连接村%d和村%d,公路长度为%d\n\n",visit[pos],pos,low[pos]); visit[pos]=-1; p=AdjList[pos].firstarc; while(p!=NULL) { if(p->adjvex!=-1&&p->info<low[p->adjvex]) low[p->adjvex]=p->info,visit[p->adjvex]=pos; p=p->nexta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤粉工班组管理强化考核试卷含答案
- 2025-2026学年何敏儿说课稿小学音乐
- 石英手表装配工安全应急强化考核试卷含答案
- 信息通信信息化系统管理员技能安全强化考核试卷含答案
- 电线电缆绞制工班组管理能力考核试卷含答案
- 油墨颜料制作工岗中实践综合考核试卷含答案
- 2025-2026学年地理说课稿教学反思范文
- 2026年卷烟制造行业现状及趋势分析报告及未来五至十年AI赋能与效率革命
- 2026年通讯设备批发行业发展前景研判报告及未来五至十年服务化与定制化趋势
- 2026年动物防治员题库及答案
- 人教版九年级英语上册Unit 3 Smart Learning Section A 1a-1d教学设计
- 2026年军队文职技能岗考试《卫生员》题库及答案
- DB53T 683-2015 地理标志产品 芒市石斛
- 妊娠期高血压急症应急预案演练脚本
- 2025重庆铜梁区集中回引一批本土人才到村挂职36人考试模拟试题及答案解析
- 2025年广东省军事理论竞赛题库
- 药事管理与法规药事管理与法规药事药事管理与药事组织段立华9
- 辱骂调解协议书模板
- 小学语文整本书阅读《没头脑和不高兴》导读课件
- 直肠癌手术的并发症及处理
- 如何记忆抽象图形
评论
0/150
提交评论