ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:332.40KB ,
资源ID:19318472      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19318472.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告无向图的邻接矩阵存储结构Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告无向图的邻接矩阵存储结构Word格式.docx

1、四、主要技术路线提示用一维数组存放图的顶点信息,二维数组存放各边信息。五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:序号设计内容天数1分析问题,给出数学模型,选择数据结构2设计算法,给出算法描述3给出源程序清单4编辑、编译、调试源程序5编写课程设计报告总 计10六、推荐参考资料1 严蔚敏,吴伟民.数据结构.清华大学出版社出版。 2 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。3唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月4 朱战立.数据结构(C+语言描述)(第二版本).高等出版社出版.2004年4月

2、5胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日目 录 引 言 51 需求分析 61.1任务与分析 61.2测试数据 62 概要设计 72.1 ADT描述 72.2程序模块结构 82.3各功能模块 103详细设计 113.1类的定义 113.2 初始化 123.3 图的构建操作 123.4 输出操作 133.5 get操作 133.6 插入操作 143.7 删除操作 143.8 求顶点的度操作 153.10 判断连通操作 163.11 主函数 174 调试分析 204.1 测试数据 204.2调试问题 204.3 算

3、法时间复杂度 204.4 经验和心得体会 215用户使用说明 216 测试结果 216.1 创建图 216.2插入节点 226.3 深度优先遍历 226.4 求各顶点的度 236.5 输出图 236.6 判断是否连通 246.7 求边的权值 246.8 插入边 256.9 删除边 25结 论 27致 谢 28摘 要 随着计算机的普及,涉及计算机相关的科目也越来越普遍,其中数据结构是计算机专业重要的专业基础课程与核心课程之一,为适应我国计算机科学技术的发展和应用,学好数据结构非常必要,然而要掌握数据结构的知识非常难,所以对“数据结构”的课程设计比不可少。本说明书是对“无向图的邻接矩阵存储结构”课

4、程设计的说明。首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。关键词:网络化;计算机;对策;图;储存。引 言 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的

5、数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。此次课程设计根据课堂讲授内容,下发任务书,要求学生完成相应系统,以消化课堂所讲解的内容;通过调试典型例题或习题积累调试C+程序从而获得数据结构的编程经验;通过完成此项课程设计,逐渐培养学生的编程能力、用计算机解决实际问题的能力,并充分理解图的矩阵储存方法。此次课程设计题目为无向图的邻接矩阵存储结构,所利用工具为 Microsoft visual stud

6、io 2008.1 需求分析 随着计算机的普及,信息的存储逐渐和我们的日常生活变得密切起来,而数据的存储方式也多种多样,比如树、链表、数组、图等等。为了充分体现图的矩阵储存结构的优势与功能,要求本系统应达到以下要求:1. 图是无向带权图2. 能从键盘上输入各条边和边上的权值;3. 构造图的邻接矩阵和顶点集。4. 输出图的各顶点和邻接矩阵5. 插入一条边6. 删除一条边7. 求出各顶点的度8. 判断该图是否是连通图,若是,返回1;9. 使用深度遍历算法,输出遍历序列。1.1任务与分析 邻接矩阵是表示图形中顶点之间相邻关系的矩阵。设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是n阶方阵。为了实

7、现此算法,用一维数组a存放图的顶点信息,二维数组b存放各边信息。顶点或者边存在,则该数组应有值,通过此来进行建立、插入、删除。其余方法也将能通过数组的特性来实现。1.2测试数据 1. 建立图的矩阵存储结构,第一次建立连通图A1,第二次建立非连通图A2。如下:图1.1 测试数据2. 选择输出图3. 选择插入节点,插入44. 选择插入边,在3,4节点中插入边,权值为555. 选择深度优先搜索6. 选择判断是否连通7. 选择求最小生成树8. 选择求各顶点的度9. 选择退出,重新运行,此次建立A2的图,再次进行测试。2 概要设计 2.1 ADT描述 ADT Glist VR=图的顶点和边VR= | v

8、,wV, 表示顶点v和w间的边;基本操作:初始化空图;输入建立图;深度优先遍历图;确定图中的顶点数目;确定图中边的数目;在图中插入一个顶点;在图中插入一条边;删除图中一个顶点删除图中的一条边;求顶点的度;求最小生成树; ADT Graph;2.2程序模块结构 图2.1:模块结构2.2.1结构体定义本系统未采用结构体方法,类的定义如下:定义顶点: nodecount,edgecount 边:已经分别存放顶点和边的两个数组: aMaxNode和 bMaxNodeMaxNode;其余成员函数均以public形式声明。在邻接矩阵表示的图中,顶点信息用一维数组表示a。在简单情况下可省略,仅以下标值代表顶

9、点序号。若需要,顶点信息更加丰富。边(或弧)信息用二维数组表示b ,这也是邻接矩阵。包含边的权值。在类中数据成员有4个,重要的是邻接矩阵Edge 、总边数edgecount和顶点数nodecount。class Graph1 private: int nodecount;/节点 int edgecount;/边 int aMaxNode;/顶点信息组 /set a; int bMaxNodeMaxNode;/权值信息组public: Graph1(int);/构造函数 int getNodeCount();/当前的节点数 int getEdgeCount();/当前的边数 void inser

10、tNode(int);/插入一个节点 void isertEdge(int ,int ,int);/插入一条边 void deleteEdge(int,int);/删除一条边 bool isliantong();/判断是否连通 int getWeight(int,int);/获得某条边的权值 int Depth(int );/深度遍历准备,用于建立顶点访问数组和记录所访问顶点个数 void Depth(int v,int visited,int &n);/深度遍历 void outDu(Graph1 G);/输出节点个数 void PrintOut(Graph1 G) ;/输出图 void C

11、reatG(int n,int e); /建立图;2.3各功能模块以下将以注释形式为每个函数的功能进行声明:构造函数:Graph1(int) 用于初始化图 get函数:int getNodeCount();得到当前的节点数int getWeight(int,int);获得某条边的权值int getEdgeCount();得到当前的边数插入函数:void insertNode(int);插入一个节点void isertEdge(int ,int ,int);插入一条边删除函数:void deleteEdge(int,int);删除一条边判断函数:bool isliantong();判断是否连通遍

12、历函数1:int Depth(int );遍历函数2:void Depth(int v,int visited,int &求度函数:void outDu(Graph1 G);输出节点个数输出函数:void PrintOut(Graph1 G) ;输出图构建函数:void CreatG(int n,int e);建立图3详细设计3.1类的定义 void prim(int);/生成最小树3.2 初始化初始化邻接矩阵以及有关参数,通过for循环将数组的值都初始化为0,使之成为一个空图。Graph1:Graph1(int s=MaxNode)/构造函数 for(int i=0;i=s-1;i+) fo

13、r(int j=0;jj+) bij=0; nodecount=0; for(int k=0;kk+) ak=-1; 3.3 图的构建操作在主函数中要求输入需要构建的图的顶点数和边数,调用构建函数,分别用两个for语句来构建图(即输入顶点的值和边的权值),此处要求输入有一定的顺序,不能随意输入。void Graph1:CreatG(int n,int e) int i,vi,vj,w; edgecount=e; nodecount=n; coutendl 输入顶点的信息(暂设为整型): ; for ( i=0; inodecount; i+ ) coutn i+1ai;edgecount; i

14、+ ) /输入两个顶点编号和边权值 输入边的信息(vi,vj,w):endl;vivjw; bvi-1vj-1=w; bvj-1vi-1=w;3.4 输出操作本函数通过传过来的对象G得到相关数组,通过for循环来分别输出顶点数组和边的权值数组(邻接矩阵)。PrintOut(Graph1 G) int i;n 输出顶点的信息:G.getNodeCount(); i+ ) coutG.ain 输出邻接矩阵: i+ ) for ( int j=0; jG.getNodeCount() ;j+ ) coutG.bij3.5 get操作用于得到图的顶点数、边数、权值int Graph1:getNodeC

15、ount()/当前的节点数 return nodecount; int Graph1:getEdgeCount()/当前的边数 return edgecount; getWeight(int x,int y)/获得某条边的权值 return bx-1y-1;3.6 插入操作插入顶点:通过将传来的值(顶点值)赋到一个当前顶点数下一个的数组元素中实现插入功能,此时顶点树加1。插入边:原理与插入顶点相同,通过传过来的两个顶点信息与权值进行相应赋值,不过此时应该注意表示同一条边的两个数组都该赋值。 void Graph1:insertNode(int it)/插入一个节点 anodecount+=it

16、;当前节点数为:nodecountisertEdge(int x,int y,int w)/插入一条边 bx-1y-1=w; by-1x-1=w;该边插入成功! edgecount+;3.7 删除操作将相应的数组值赋为0从而达到删除目的。deleteEdge(int x ,int y)/删除一条边 bx-1y-1=0; by-1x-1=0;边(x,y)已经成功删除! edgecount-;3.8 求顶点的度操作通过两个for循环来查找各顶点,判断其是否有边(权值),有边的话又有几条边,每找到一条边则度数加一,记录到存放顶点的度数的数组M中,搜索完成后输出各顶点的度。outDu(Graph1 G

17、)/输出各点的度 int mMax=0,k,i; for(k=0; for(i=0; if(G.bki!=0) mk+;各点的度:顶点的度:mi3.9 深度遍历操作图的深度优先遍历DFS算法是沿着某初始顶点出发的一条路径,尽可能深入地前进,即每次在访问完当前顶点后,首先访问当前顶点的一个未被访问过的邻接顶点,然后去访问这个邻接点的一个未被访问过的邻接点,这是一个递归算法。其中第一个遍历函数Depth(int node)其主要作用是构建访问数组int v,以及调用核心遍历函数Depth(int v,int visited,int &n),其中的n是用来记录访问的顶点数目,用于判断图的连通性。De

18、pth(int node) int n=0; int vMaxNode;=nodecount-1; vi=0; Depth(node,v,n); return n;/n记录访问节点数,用于判断是否连通Depth(int v,int visited,int &n)v+1/访问顶点v visitedv=1; /标记顶点v已访问 n+;/n记录访问节点数 for (int col=0; col col+) if (bvcol=0|bvcol=Max) continue; /找v一个邻接点col if (!visitedcol) Depth(col, visited,n); /调用深度递归遍历3.10

19、 判断连通操作通过调用遍历函数得到所能访问的顶点数n,然后判断n与当前顶点数是否相等来确认是否连通。bool Graph1:isliantong()/判断是否连通 n=Depth(0);该图的总节点数为:!其中一个连通分量连通的节点数为:n if(n=nodecount)/访问到的节点数与顶点数是否相等 return 1; else return 0;3.11 主函数主函数的主要功能是引导构建新图的邻接矩阵存储结构,并且制作菜单、调用各个相应的功能函数。int main()Graph1 G(10);int x,y,w;int node;coutn;int e;e;G.CreatG(n,e);恭

20、喜你!你的图已经建立成功!/system(pause);while(true) /system(cls*请选择你要进行的操作:*1-输出图! *2-判断图是否连通!*3-表示深度优先搜索!*4-表示求各顶点的度!*5-表示插入新节点!*6-表示删除边!*7-求边的权值 *8-插入新的边!*0-表示结束操作!int choice;请你做出选择!choice;switch(choice)case 1: G.PrintOut(G); break;case 2: if(G.isliantong()该图是连通的! else couty; G.deleteEdge(x,y);case 7:请输入你要查询的边的两个顶点G.getWeight(x,y)case 8:请输入你要添加的e G.isertEdge(x,y,w);case 0:感谢使用! return 0;/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1