光纤通信网铺设方案设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的最小生成树。

对于最小生成树问题:最小生成树是指在所有生成树中,边上权值之和最小的生成树,另外最小生成树也可能是多个但是他们权值之和是相等的。

相关文档
最新文档