C++课程设计图的遍历.doc
《C++课程设计图的遍历.doc》由会员分享,可在线阅读,更多相关《C++课程设计图的遍历.doc(20页珍藏版)》请在沃文网上搜索。
1、一、前言 1.1课程设计的目的与意义41.2对课程设计功能的需求分析4二、算法思想5三、数据结构5四、模块划分6node* creategraph()/建立邻接表,完成无向图的输入void DepthFirstSearch(node *list)/深度优先搜索void BreadthFirstSearth(node *list)/广度优先搜索void PathSearth(node *list)/路径搜索void AdjacencyListDelete(node *list)/释放邻接表的空间AdjacencyListDelete(list);/释放邻接表空间五、系统的概要设计1、系统功能模块
2、图9六、源程序10七、程序的调试分析以及测试结果1、程序的调试测试结果20八、附录1、附录一心得212、参考文献22一、前言1.1课程设计的目的与意义上学期我们对数据结构这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求我们掌握数据结构中的各方面知识,还要求我们具备一定的C+语言基础和编程能力。通过实践我们掌握数据结构中的知识。对于图的遍历这一课题来说,所要求我们掌握的数据结构知识主要有:图的存储结构、队列的基本运算实现、图的深度优先遍历算法实现、图的广度优先遍历算法实现。对于我们学生来讲,此
3、次课程设计是为了让我们训练自己的实际设计能力,通过设计实践,去真正获得此项目管理和团队协作等方面的基本训练和工作经验。通过课程设计的一系列训练,我们能提高如何综合运用所学知识解决实际问题的能力,以及获得此项目管理和团队协作等等众多方面的具体经验,增强对相关课程具体内容的理解和掌握能力,培养对整体课程知识综合运用和融会贯通能力。1.2对课程设计功能的需求分析图的遍历并不需要是一个过于复杂的工作环境,一般来说:最合适的才是最好的。软件设计必须符合我们使用实际情况的需要。根据要求,图的遍历主要功能如下: 1、用户可以随时建立一个有向图或无向图;2、用户可以根据自己的需要,对图进行深度遍历或广度遍历;
4、3、用户可以根据自己的需要对图进行修改;4、在整个程序中,用户可以不断的按照不同的方式对图进行遍历,若不继续,用户也可以随时跳出程序,同时,如果用户输入的序号错误,程序会提示用户重新输入序号;二、算法思想本课题本人所采用的是邻接表的方式存储图,实现图的深度、广度两种遍历,并将每种遍历结果输出来。并且能寻找路径。2.1.1图的邻接矩阵的建立 对任意给定的图(顶点数和边数自定),根据邻接表的存储结构建立图的邻接表。2.1.2 图的遍历的实现 邻接表是图的一种链式存储结构,在邻接表中,对图中的每一个顶点建立一个单链表,通常以顺序结构存储,以便随机访问任意一顶点。图的深度遍历,假设初始状态是图中所有顶
5、点都未曾被访问,则深度优先遍历可从图中的某个顶点v出发,访问此顶点,依次从v的未被访问的邻接点出发深度优先遍历图,直至图中和v有路径想通的顶点都被访问到;若此时图中尚有未被访问的节点,则另选图中一个未被访问的顶点做起始点,直至所有节点都被访问。图的广度优先遍历,是以v为起始点,由近及远,依次访问和v有路径相通且路径长度为1、2、的顶点。三、数据结构#define t true#define f false#includestruct node/定义一个结构作为节点类型 int data; bool sign;/标志位,用来标示是否遍历过 node *next;四、模块划分 node* crea
6、tegraph()/建立邻接表,完成无向图的输入;0410213243输入节点数动态分配节点数组内存边边表4.1邻接表的建立void DepthFirstSearch(node *list)/深度优先搜索void DepthFirstSearch(node *list)cink;ai=klistk.sign=t;i+listk.sign=t k=p-data; 真p=p-next; i+ 非零 零if(listk.sign!=f)结束程序图4.2 深度优先遍历流程图void BreadthFirstSearth(node *list)/广度优先搜索BreadthFirstSearthth 搜索
7、起始节点cink; listk.sign=t; p=listam.next; 真 if(listk.sign=f)r+; 标记p=p-next;I+程序结束for(int i=1;i=n;i+)/恢复原邻接表 listi.sign=f;表4.3图的广度遍历void PathSearth(node *list)/路径搜索void AdjacencyListDelete(node *list)/释放邻接表的空间AdjacencyListDelete(list);/释放邻接表空间五、系统的概要设计main() /*包含一些调用和控制语句*/进入菜单选择用户登录图信息的录入路径收索广度优先遍历图深度优
8、先遍历图 退出程序 图5.1系统功能模块图六、部分源程序#define t true#define f false#includestruct node/定义一个结构作为节点类型 int data; bool sign;/标志位,用来标示是否遍历过 node *next;node* creategraph()/建立邻接表,完成无向图的输入 int l,m,n; bool g; coutn; node *adjacencylist=new noden+1;/动态分配节点数组内存 adjacencylist0.data=n;/0地址存放的为节点数 adjacencylist0.next=NULL;
9、 for(int i=1;i=n;i+)/给各顶点域赋初值 adjacencylisti.data=0; adjacencylisti.next=NULL; adjacencylisti.sign=f;/表示未遍历 cout请依次输入各条边的始点和尾点:(以0表示结束)l; if(l!=0)/判断输入边是否结束 g=t; while(g=t) cinm; if(l0)&(l0)&(mdata=m; p-next=NULL; if(adjacencylistl.next=NULL)/为每个节点创建邻接链表 adjacencylistl.next=p; else top=adjacencylist
10、l.next; while(top-next!=NULL) top=top-next; top-next=p; adjacencylistl.data+;/统计邻接点的个数 q=(node *)new(node);/分配边的另一个顶点内存 q-data=l; q-next=NULL; if(adjacencylistm.next=NULL)/构建邻接表 adjacencylistm.next=q; else top=adjacencylistm.next; while(top-next!=NULL) top=top-next; top-next=q; adjacencylistm.data+;
11、/统计邻接点的个数 else cout边l-m输入错误!l; if(l=0)/边的输入结束 g=f; return adjacencylist;/返回邻接表;void DepthFirstSearch(node *list)/深度优先搜索 int m,n=list0.data,k,*a=new intn;/设置一个数组用于存放节点 node *p; cout采用深度优先搜索:endl; coutk; for(int i=0;idata; p=p-next; if(listk.sign=f) break; m+; if(listk.sign!=f)/判断是否是p=NULL跳出while循环的 i
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程 设计图 遍历
