数据结构实验报告--图

数据结构实验报告--图

ID:39578301

大小:97.45 KB

页数:13页

时间:2019-07-06

数据结构实验报告--图_第1页
数据结构实验报告--图_第2页
数据结构实验报告--图_第3页
数据结构实验报告--图_第4页
数据结构实验报告--图_第5页
资源描述:

《数据结构实验报告--图》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据结构实验报告图一、实验目的1、熟悉图的结构和相关算法。二、实验内容及要求1、编写创建图的算法。2、编写图的广度优先遍历、深度优先遍历、及求两点的简单路径和最短路径的算法。三、算法描述1、图的邻接表存储表示:对图的每个顶点建立一个单链表,第i个单链表表示所有依附于第i个点的边(对于有向图表示以该顶点为尾的弧);链表的每个节点存储两个信息,该弧指向的顶点在图中的位置(adjvex)和指向下一条弧的指针(nextarc)。每个连表的头结点存储顶点的数据:顶点信息(data)和指向依附于它的弧的链表域。存储表示如下:typedefstructArcNode{intadjvex;/

2、/该弧所指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针//InfoType*info;//该弧相关信息的指针}ArcNode;typedefstructVNode{chardata;//顶点信息intdata2;intsngle;ArcNode*firstarc;//指向第一条依附该顶点的弧}VNode,AdjList[MAX_NUM];typedefstruct{AdjListvertices;intvexnum,arcnum;intkind;//图的种类标志}ALGraph;2、深度优先搜索:假设初始态是图中所有定点未被访问,从图中的某

3、个顶点v开始,访问此顶点,然后依次从v的未访问的邻接点出发深度优先遍历,直至途中所有和v有相同路径的点都被访问到;若图中仍有点未被访问,则从图中另选一个未被访问的点作为起点重复上述过程,直到图中所有点都被访问到。为了便于区分途中定点是否被访问过,需要附设一个访问标致数组visited[0..n-1],将其初值均设为false,一旦某个顶点被访问,将对应的访问标志赋值为true。2、广度优先搜索:假设初始态是图中所有顶点未被访问,从图中的某个顶点v开始依次访问v的各个未被访问的邻接点,然后分别从这些邻接点出发以此访问他们的邻接点,并使“先被访问的邻接顶点”先于“后被访问的邻接顶

4、点”被访问,直至图中所有已被访问过的顶点的邻接顶点都被访问。若图中仍有未被访问的顶点,选择另一个未被访问的顶点开始,重复上述操作,直到图中所有顶点都被访问。为了使“先被访问的邻接顶点”先于“后被访问的邻接顶点”被访问,在次算法中加入一个队列,queue暂时存储被访问的顶点。3、搜索简单路径:利用深度优先搜索,以一个要搜索的起点v顶点为起始点,搜索到要找的终点s结束。为了方便记录路径,此算法中加入栈。访问第v个顶点时将v入栈,以v为顶点进行深度优先搜索,分别将其邻接点vi入栈,若找到s,将s入栈,若没有找到,将vi出栈;对vi+1深度优先搜索,直到找到s,或者图中所有顶点都被访

5、问。4、搜索最短路径:搜索最短路径时,要记录被访问的顶点的上一个顶点在图中的位置,所以添加一个上一个顶点的标识single;访问v时将其标识置为-1;搜索从v到s的最短路径,从v开始进行广度优先搜索,直到找到s,将s以及它的之前的顶点依次入栈,直到将v入栈,然后将栈内元素输出。四、程序代码:#include#include#include#defineMAX_NUM20boolvisited[MAX_NUM];//访问标致数组boolfound;intfomer=0;charv1,v2;inttfind;typedefs

6、tructArcNode{intadjvex;//该弧所指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针//InfoType*info;//该弧相关信息的指针}ArcNode;typedefstructVNode{chardata;//顶点信息intdata2;intsngle;ArcNode*firstarc;//指向第一条依附该顶点的弧}VNode,AdjList[MAX_NUM];typedefstruct{AdjListvertices;intvexnum,arcnum;intkind;//图的种类标志}ALGraph;voidDFS

7、(ALGraphG,intv);typedefstructqnode//队列类型{intdata;qnode*next;}qnode,*queueptr;typedefstruct{queueptrfront;queueptrrear;}linkqueue;typedefstructstack//用栈存储路径{char*base;char*top;intstacksize;intsize;}Stack;Stacks;intinitstack(Stack&s){s.base=(char*)malloc(4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。