图论及其应用论文_第1页
图论及其应用论文_第2页
图论及其应用论文_第3页
图论及其应用论文_第4页
图论及其应用论文_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图论及其应用论文姓名:xxx学号:xxx专业:xxx图论在高校互联校内网建设的应用摘要图论和我们的生活其实是息息相关的,我们在生活中处处可见图论的实际应用。特别的,图论对我们通信专业以后的工作也有着极大的帮助。在以后的工作中也会时时用到图论的相关知识。本论文的主旨是利用相关的图论知识来解决重庆几所高校建立互联校内网的问题。主要是为了能使各重庆高校的学生能够免费共享高校的学习资源。从而促进各高校学生的共同发展。本文中,解决重庆几所高校建立互联校内网主要应用的是求图的最小生成树的方法。而求图的最小生成树有两种算法,一种是Prim(普里姆)算法,另一种是Kruskal(克鲁斯卡尔)算法。本文通过将高

2、校转换成连通图,再将连通图转换成邻接矩阵。在C+上,通过输入结点和权值,用普里姆算法获得权值最小边来得到最小生成树,从而在保证各个地点之间能连通的情况下节省所需费用。关键字:最小生成树、PRIM算法、邻接矩阵、高校互联校内网建设1. 连通图(1)概述在图论中,连通图基于连通的概念。在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的。如果 G 是有向图,那么连接vi和vj的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。图的连通性是图的基本性质。(2)严格定义对一个图 G=(V,E) 中的两点 x 和 y ,若

3、存在交替的顶点和边的序列=(x=v0-e1-v1-e2-.-ek-(vk+1)=y) (在有向图中要求有向边vi( vi+1)属于E ),则两点 x 和 y 是连通的。是一条x到y的连通路径,x和y分别是起点和终点。当 x = y 时, 被称为回路。如果通路 中的边两两不同,则 是一条简单通路,否则为一条复杂通路。如果图 G 中每两点间皆连通,则 G 是连通图。(3)相关概念连通分量:无向图 G的一个极大连通子图称为 G的一个连通分量(或连通分支)。连通图只有一个连通分量,即其自身;非连通的无向图有多个连通分量。强连通图:有向图 G=(V,E) 中,若对于V中任意两个不同的顶点 x和 y,都存

4、在从x到 y以及从 y到 x的路径,则称 G是强连通图。相应地有强连通分量的概念。强连通图只有一个强连通分量,即是其自身;非强连通的有向图有多个强连分量。弱连通图:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。初级通路:通路中所有的顶点互不相同。初级通路必为简单通路,但反之不真。(4)性质一个无向图 G=(V,E) 是连通的,那么边的数目大于等于顶点的数目减一:|E|>=|V|-1,而反之不成立。如果 G=(V,E) 是有向图,那么它是强连通图的必要条件是边的数目大于等于顶点的数目:|E|>=|V|,而反之不成立。没

5、有回路的无向图是连通的当且仅当它是树,即等价于:|E|=|V|-1。2. 最小生成树(1)树树包含n(n>=0)个节点。当n=0时表示为空树。其定义如下:T=(D,R)其中,D为树中节点的有限集合,关系R满足一下条件:有且仅有一个节点k0属于D,它对于关系R来说没有前趋节点,结点k0称作树的根结点。除根结点k0之外,D中的每个结点仅有一个前趋结点,但可以有过个后继结点。D中可以有多个终端结点。即除根结点无父结点,其余各结点都有一个父结点和n(n>=0)个子结点。(2)邻接矩阵图的矩阵表示,本文中只用到了邻接矩阵,故在这只提出邻接矩阵的定义,及其图在邻接矩阵中的表示。设图 A = (

6、V, E)是一个有 n 个顶点的图, 图的邻接矩阵是一个二维数组 A.edgenn,用来存放顶点的信息和边或弧的信息。是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V=v1,v2,vn。G的邻接矩阵是一个具有下列性质的n阶方阵:无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称的。无向图的邻接矩阵中第i行第j列表示i结点到j结点的度即权值,可以表示为某一具体应用的数据。也表示i结点是否与j结点连通。(3)最小生成树在一给定的无向图G=(V, E)中(u,v) 代表连接顶点u与顶点v的边(即),而 w(u,v)代表此边的权重,若存在T为E的子集(即)且为无循环图,使得的w(T)

7、最小则此T为G的最小生成树。3.prim算法思想:首先,选择带最小的边,把它放进生成树里,相继添加带权最小的边,这些边与已在树立的顶点相关联,并且不与已在数理的边形成圈,当已经添加了n-1条边为止步骤:假设V是图中顶点的集合,E是图中边的集合,TE为最小生成树中的边的集合,则prim算法通过以下步骤可以得到最小生成树:(1)初始化:U=u 0,TE=f。此步骤设立一个只有结点u 0的结点集U和一个空的边集TE作为最小生成树的初始形态,在随后的算法执行中,这个形态会不断的发生变化,直到得到最小生成树为止。(2)在所有uU,vVU的边(u,v)E中,找一条权最小的边(u0,v0),将此边加进集合T

8、E中,并将此边的非U中顶点加入U中。此步骤的功能是在边集E中找一条边,要求这条边满足以下条件:首先边的两个顶点要分别在顶点集合U和VU中,其次边的权要最小。找到这条边以后,把这条边放到边集TE中,并把这条边上不在U中的那个顶点加入到U中。这一步骤在算法中应执行多次,每执行一次,集合TE和U都将发生变化,分别增加一条边和一个顶点,因此,TE和U是两个动态的集合,这一点在理解算法时要密切注意。(3)如果U=V,则算法结束;否则重复步骤2。可以把本步骤看成循环终止条件。我们可以算出当U=V时,步骤2共执行了n1次(设n为图中顶点的数目),TE中也增加了n1条边,这n1条边就是需要求出的最小生成树的边

9、。4.实际问题及其解决现有:重庆大学,西南大学,西南政法大学,重庆师范大学,重庆邮电大学5所高校,要求把他们的校内网进行互联,以组建一个更大的校园网络。在发费最少的情况下进行光缆的铺设。根据实际测量地图的得到的各学校之间的直线距离图:由于每公里光缆造价相同,故可以用实际距离代替造价作为权重。实际情况缩略图:设:重庆邮电大学V1重庆大学V2重庆师范大学V3西南大学V4西南政法大学V5输入程序运行得到结果:解决问题得到结果:5.总结通过对prim算法编写的程序我们可以轻易地得到在发费最少的情况下进行光缆的铺设的路径。这大大的节约了成本和时间,是对实际问题的一次生动尝试。同时这个程序也可以进行相应的

10、改善和推广,以利于我们的工作实践。参考文献【1】图论及其算法,殷剑宏等,中国科学技术大学出版社。【2】C语言程序设计(第三版),谭浩强,清华大学出版社。【3】数据结构(C语言版),严蔚敏 吴伟民,清华大学出版社。程序#include "stdio.h"#define maxnum 10#define maxvalue 88typedef struct /定义存放各节点间边的权值的二位数组为新的数据类型可称为图int vmaxvaluemaxvalue; mgraph; /该数据类型用标识符mgraph表示mgraph input(int n) /数据输入函数用于输入各节点间

11、边的权值mgraph x; /定义x为mgraph类型while(n<=0|n>maxnum) /控制输入出错重新执行printf("输入有误,请重新输入:"); scanf("%d",&n);for(int i=1;i<=n;i+) /双层循环控制每个节点到其他各节点的权值for(int j=0;j<=n;j+) int temp; /定义临时变量用于存放输入权值便于接下的过滤操作if(i=j) /各节点到自身的权重赋为0x.vij=0; else if(i<j) /赋值其他各点到比其大的下标的节点printf(&

12、quot;请输入节点%d到节点%d的权:",i,j);scanf("%d",&temp); /将输入临时存放在tempwhile(temp=0|temp<-1) /过滤输入数据printf("输入有误,请重新输入:n");printf("请输入%d到%d的权:",i,j);scanf("%d",&temp);if(temp>0) /将符合要求数据赋值给tempx.vij=temp; else /temp=-1时将权重赋值最大值88 x.vij=maxvalue;else /i&

13、gt;j由于权重是对称的即呈上三角或下三角分布故只需将i,j对换即可x.vij=x.vji;printf("n");return x; /返回图xvoid print(mgraph g,int n) /打印函数int i,j; /定义整型i,jprintf(" "); /打印美观需要for(i=1;i<=n;i+) printf("%2d ",i); printf("n");for(i=1;i<=n;i+) /双层循环按矩阵方式打印输出各节点间权值printf("%d ",i); f

14、or(j=1;j<=n;j+)printf("%2d ",g.vij); printf("n");void prim(mgraph g,int k,int n) /核心算法Prim算法实现函数int i,j,min,p; /定义整型变量i,j用于循环 min和p分别用于临时存放最小权值及其下标struct /定义型类型数据closedge用于临时存放下标和最小边int adjvex;int lowcost;closedgemaxnum; for(i=1;i<=n;i+) /初始化辅助数组if(i!=k) closedgei.adjvex=k;

15、closedgei.lowcost=g.vki;closedgek.lowcost=0; /将节点加入生成树中for(i=1;i<n;i+) /循环比较最小权值且将最小权值的点加入生成树中并打印输出p=1; /初始化p min=maxvalue; /初始化最小权值for(j=1;j<=n;j+) /循环n次比较最小权值if(closedgej.lowcost!=0&&closedgej.lowcost<min) /当前节点不在已生成树中且权值最下min=closedgej.lowcost; /替换最小权值为当前节点的权值p=j; /记录该节点下标printf("%d_ _%dn",closedgep.adjvex,p,min); /打印最小的权值的下标和最小边closedgep.lowcost=0; /将该节点加入生成树中 for(j=1;j<=n;j+) /刷新临时存放空间if(g.vpj) < (closedgej.lowcost)closedgej.lowcost=g.vpj; /赋值最小边closedgej.adjvex=p; /赋值最小边对应下标int main() /主函数int n,start; /定义整型n,start表示节点数和开始节点printf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论