课 程 设 计 报 告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、问题描述 (2)
二、课程设计目的 (2)
三、概要设计 (2)
四、问题实现的主要算法与分析 (3)
五、数据信息 (3)
六、源程序 (4)
七、运行结果 (8)
八、课程设计的小结 (9)
九、参考文献 (10)
一、问题描述
1.若要在扬州大学的七个校区(广陵校区、盐阜校区、瘦西湖校区、农学院校区、工学院校区、水利学院校区、医学院校区)之间架设校园网,如何以最低的经济代价架设这个校园网。
2.利用二种方法(Prim算法和克鲁斯卡尔(Kruskual)算法生成校园网的架设方案
3.分别对每种方法选定一组测试数据进行测试,验证程序的正确性。
二、课程设计目的
课程设计的目的是培养学生综合程序设计的能力,训练学生灵活应用所学数据结构知识,独立完成问题分析、总体设计、详细设计和编程实现等软件开发全过程的综合实践能力。巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的学习作风。为今后学习其他计算机课程打下基础。
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将书本上的理论知识和工作、生产实际有机地结合起来,从而锻炼学生分析问题、解决实际问题的能力,提高学生的编程序能力和创新意识。
三、概要设计
1.Prim算法:
ADT Graph{
数据对象V:V是具有相同特性的数据元素的集合,成为顶点集。
数据关系R:
R={VR}
VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在路径}
基本操作P:
min(closedge,n);
初始条件:图G存在。
操作结果:求权值最小的弧尾顶点。
minspantree(u,n,closedge);
初始条件:图G存在。
操作结果:求图G的最小生成数。
}ADT Graph
2.Kruskal算法:
ADT MGraph{
数据对象V:V是具有相同特性的数据元素的集合,成为顶点集。
数据关系R:
R={VR}
VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在路径}
基本操作P:
sort(edges,G)
初始条件:图G存在。
操作结果:求按权值大小从小到大排序。
MinSpantree(G);
初始条件:图G存在。
操作结果:求图G的最小生成数。
Find(parent,f);
初始条件:parent是已经存在的集合,v是某个子集成员。
操作结果:查找函数。返回父亲结点。
}ADT MGraph
四、问题实现的主要算法与分析
1.Prim算法
(1)typedef struct{int adj,low;}edge:定义结构体edge,包含成员adj(顶点),low (权);
(2)int min(edge closedge[],int n):求权值最小的弧尾顶点;
(3)void minspantree(int u,int n,edge closedge[]):用Prim算法求最小生成树;(4)main():包括用文件打开方式调用数据创建一个图,并对其用Prim算法求最小生成树2.Kruskal算法
(1)typedef struct{int begin;
int end;
int weight;
}edge:定义结构体edge,包含成员begin(弧头),end(弧尾),weight(权值);
typedef struct{int adj;
int weight;
}AdjMatrix[MAX][MAX]:定义结构AdjMatrix[MAX][MAX],包含成员包含成员adj(顶点),weight(权值);
typedef struct{AdjMatrix arc;
int vexnum,arcnum;
}MGraph:定义结构体MGraph,包含成员AdjMatrix arc(AdjMatrix 型的成员),vexnum(顶点数),arcnum(边数);
(2)void sort(edge edges[],MGraph *G):对权值进行从小到大的排序;
(3)void MinSpanTree(MGraph *G):用Kruskal算法求最小生成树;
(4)int Find(int *parent,int f):找尾;
(5)void main():包括用文件打开方式调用数据创建一个图,并对其用Kruskal算法求最小生成树。
五、数据信息
1:广陵校区 2:盐阜校区
3:瘦西湖校区 4:农学院校区
5:工学院校区 6:水利学院校区
7:医学院校区;
1 2 11
1 3 20
1 4 12
1 5 10
1 6 11
1 7 15
2 3 10
2 4 1
2 5 1
2 6 2
2 7 4
3 4 9
3 5 11
3 6 12
3 7 12
4 5 2
4 6 3
4 7 3
5 6 1
5 7 5
6 7 6
六、源程序
Prim算法:
/* Note:Your choice is C IDE */
#include"stdio.h"
#define Max 200
typedef struct
{int adj,low;}edge;
int G[20][20];
int min(edge closedge[],int n)
{int i,t,l;
t=100;
for(i=1;i<=n;i++)
if((closedge[i].low)&&(closedge[i].low }