光纤通信网铺设方案设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验报告
题目: 光纤通信网铺设方案设计
班级:
姓名:
学号:
完成日期:2012/5/28
1.问题描述
在n 个城市间建设光纤通信网络,要求仅选择n-1 条线路铺设光缆,且达到每个城市都有光缆连通。
请用C语言编写程序,求出以最低经济代价(光缆总量最短)建设这个通信网的方案。城市个数、两个城市间的距离由学生自己设计,存储结构和实现算法由学生自己选定并实现。
2.需求分析
( 1 )输入的形式和输入值的范围;
形式:数字范围:无限
( 2 )输出的形式;
最小生成树
(3)程序所能达到的功能。
在n 个城市间建设光纤通信网络,要求仅选择n-1 条线路铺设光缆,且达到每个城市都有光缆连通。
3.概要设计
(1)说明本程序中用到的所有抽象数据类型的定义(含数据对象、数据关系、基本操作);
typedef int adjmatrix[maxvertexnum][maxvertexnum];
struct edgenode
{
int frontvex;
int rearvex;
int weight;
};
typedef edgenode adgeset[maxedgenum]
(2)系统中子程序及功能要求;
子程序:
将建立的网络各个连接的节点赋上权值
void insit(adgeset>,int n,adjmatrix GA)
{
for(int i=1;i { GT[i].frontvex=1; GT[i].rearvex=i+1; GT[i].weight=GA[1][i+1]; } } 子程序: 初始化的无向图,将每条边的权值赋值为无穷 void insitadj(adjmatrix &GA) { for(int i=1;i { for(int j=1;j { GA[i][j]=20000; } } } 子程序: 以各个城市为基础建立一个网络 void setadj(adjmatrix &GA,int n) // 建立网络 { for(int i=1;i<=n+1;i++) { for(int j=i+1;j { printf(" 请输入第%d个城市到第%(个城市的距离: ,i,j); scanf("%d",&GA[i][j]); } } for(i=1;i<=n+1;i++) { for(int j=i+1;j { GA[j][i]=GA[i][j]; } 子程序: 输出我们所找到的最小生成树 void fun(adjmatrix GA,adgeset>,int n) { int i; for(i=1;i { int min=10000,m=i; for(int j=i;j if(GT[j].weight { min=GT[j].weight; m=j; } } edgenode temp=GT[i]; GT[i]=GT[m]; GT[m]=temp; int k=GT[m].rearvex; for(j=i;j { int t=GT[j].rearvex; int w=GA[k][t]; if(w { GT[j].weight=w; GT[j].frontvex=k; } } } } void display(adgeset GT,int n) for(int i=1;i { printf(" 第%d 个城市到第%d 城市修建一条电缆!\n",GT[i].fro ntvex,GT[i].rearvex); } printf(" 这样修建可以使距离最短!\n"); } (3)主程序及各程序模块(函数)之间的层次(调用)关系。 int main() { printf(" 请问您要在几个城市间建立网络?\n 请在此输入:"); int n; scanf("%d",&n) ; adgeset GT; adjmatrix GA; insitadj(GA); setadj(GA,n); insit(GT,n,GA); fun(GA,GT,n); display(GT,n); return 0; } 4.详细设计 普利姆算法求最小生成树的主要思想 假设N=(V, {E})是连通网,TE是N上最小生成树中边的集合。算法从U={uO}( u0 € V),TE={}开始,重复执行下述操作:在所有u € U,v € V-U的边(u,v )€ E中找一条代价最小的边(u0,v0 )并入集合TE,同时v0并入U,直至U=V为止。此时TE中必有n-1条边,则T= (V, {E})为N的最小生成树。 对于最小生成树问题:最小生成树是指在所有生成树中,边上权值之和最小的生成树,另外最小生成树也可能是多个但是他们权值之和是相等的。