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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实现图的遍历算法实验报告.docx

1、实现图的遍历算法实验报告实现图的遍历算法实验报告一 实验题目: 实现图的遍历算法二 实验要求: 2.1:(1)建立如图(p126 8.1)所示的有向图 G 的邻接矩阵,并输出之(2)由有向图G的邻接矩阵产生邻接表,并输出之(3)再由(2)的邻接表产生对应的邻接矩阵,并输出之2.2 (1)输出如图8.1所示的有向图G从顶点0开始的深度优先遍历序 列(递归算法)(2)输出如图8.1所示的有向图G从顶点0开始的深度优先遍历序 列(非递归算法)(3)输出如图8.1所示的有向图G从顶点0开始的广度优先遍历序 列三 实验内容:3.1 图的抽象数据类型:ADT Graph数据对象V:V是具有相同特性的数据元

2、素的集合,称为顶点集。数据关系R: R=VRVR=|v,wV且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息基本操作:CreateGraph( &G, V, VR )初始条件:V是图的顶点集,VR是图中弧的集合。操作结果:按V和VR的定义构造图G。DestroyGraph( &G )初始条件:图G存在。操作结果:销毁图G。LocateVex( G, u )初始条件:图G存在,u和G中顶点有相同特征。操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。GetVex( G, v )初始条件:图G存在,v是G中某个顶点。操作结果:返回v的值。PutVex( &

3、G, v, value )初始条件:图G存在,v是G中某个顶点。操作结果:对v赋值value。FirstAdjVex( G, v )初始条件:图G存在,v是G中某个顶点。操作结果:返回v的第一个邻接顶点。若顶点在G中没有邻接顶点,则返回“空”。NextAdjVex( G, v, w )初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。操作结果:返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接点,则返回“空”。InsertVex( &G, v )初始条件:图G存在,v和图中顶点有相同特征。操作结果:在图G中增添新顶点v。DeleteVex( &G, v )初始条件:图G存在,v

4、是G中某个顶点。操作结果:删除G中顶点v及其相关的弧。InsertArc( &G, v, w )初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中增添弧,若G是无向的,则还增添对称弧。DeleteArc( &G, v, w )初始条件:图G存在,v和w是G中两个顶点。操作结果:在G中删除弧,若G是无向的,则还删除对称弧。DFSTraverse( G, Visit() )初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行深度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。BFSTraverse( G, Visit() )

5、初始条件:图G存在,Visit是顶点的应用函数。操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。ADT Graph3.2存储结构的定义;#define maxx 100#define inf 32767int vismaxx=0;/ 邻接矩阵typedef struct int no; /顶点编号 int info; VertexType; /顶点类型typedef struct int edgesmaxxmaxx; int n, e; VertexType vexsmaxx; MGraph;/ 邻接表typedef s

6、truct ANode / 边的结构定义 int adjvex; / 边的终点位置 struct ANode *nextarc; /指向下一条边的指针 int info; /权值 ArcNode;typedef struct Vnode / 表头定义 int data; /顶点信息 ArcNode *firstarc; /指向第一条边VNode;typedef VNode AdjListmaxx;typedef struct AdjList adjlist; / 邻接表 int n, e; / 顶点数 n , 边数 eALGraph;3.3基本操作实现:void DispMat1( MGrap

7、h g) int i, j; for(i = 0;i g.n; +i) for(j = 0;j g.n; +j) if(g.edgesij = inf) printf(%3s,); else printf(%3d,g.edgesij); printf(n); void MatTolist(MGraph g, ALGraph *&G) int i, j; ArcNode *p; G = (ALGraph *)malloc(sizeof(ALGraph); for(i = 0;i adjlisti.firstarc = NULL; for(i = 0;i = 0; -j) if(g.edgesij

8、 != 0&g.edgesij != inf) p = (ArcNode *)malloc(sizeof(ArcNode); p-adjvex = j; p-info = g.edgesij; p-nextarc = G-adjlisti.firstarc; G-adjlisti.firstarc = p; G-n = g.n; G-e = g.e;void DispAdj1(ALGraph *G) int i; ArcNode *p; for(i = 0;i n; +i) p = G-adjlisti.firstarc; printf(%3d:, i); while(p!=NULL) pri

9、ntf(%3d(%d),p-adjvex,p-info); p=p-nextarc; printf(n); 3.4解题思路:1.深度优先遍历(递归):用标记的方法,记录被访问过的节点,查找未访问点,并从未访问点开始进行递归。2.深度优先遍历(非递归):用栈模拟递归算法3.广度优先遍历:用循环队列储存当前节点可访问点,并进行标记。再从队列中取出所有节点进行搜索未访问节点,如是循环,直到队列为空。3.5解题过程:实验源代码如下:3.5.1图的遍历的算法#include #include #define maxx 100#define inf 32767int vismaxx=0;/ 邻接矩阵typ

10、edef struct int no; /顶点编号 int info; VertexType; /顶点类型typedef struct int edgesmaxxmaxx; int n, e; VertexType vexsmaxx; MGraph;/ 邻接表typedef struct ANode / 边的结构定义 int adjvex; / 边的终点位置 struct ANode *nextarc; /指向下一条边的指针 int info; /权值 ArcNode;typedef struct Vnode / 表头定义 int data; /顶点信息 ArcNode *firstarc;

11、/指向第一条边VNode;typedef VNode AdjListmaxx;typedef struct AdjList adjlist; / 邻接表 int n, e; / 顶点数 n , 边数 eALGraph;void DispMat1( MGraph g) int i, j; for(i = 0;i g.n; +i) for(j = 0;j g.n; +j) if(g.edgesij = inf) printf(%3s,); else printf(%3d,g.edgesij); printf(n); void MatTolist(MGraph g, ALGraph *&G) int

12、 i, j; ArcNode *p; G = (ALGraph *)malloc(sizeof(ALGraph); for(i = 0;i adjlisti.firstarc = NULL; for(i = 0;i = 0; -j) if(g.edgesij != 0&g.edgesij != inf) p = (ArcNode *)malloc(sizeof(ArcNode); p-adjvex = j; p-info = g.edgesij; p-nextarc = G-adjlisti.firstarc; G-adjlisti.firstarc = p; G-n = g.n; G-e =

13、 g.e;void DispAdj1(ALGraph *G) int i; ArcNode *p; for(i = 0;i n; +i) p = G-adjlisti.firstarc; printf(%3d:, i); while(p!=NULL) printf(%3d(%d),p-adjvex,p-info); p=p-nextarc; printf(n); void DFS(ALGraph *G, int v) ArcNode *p; visv = 1; printf(%3d,v); p = G-adjlistv.firstarc; while(p!=NULL) if(visp-adjv

14、ex = 0) DFS(G,p-adjvex); p = p-nextarc; void DFS1(ALGraph *G, int v) ArcNode *p; ArcNode *stmaxx; int top = -1, w, i; for(i = 0;i n; +i) visi = 0; printf(%3d,v); visv = 1; top+; sttop = G-adjlistv.firstarc; while(top-1) p=sttop-; while(p!=NULL) w = p-adjvex; if(visw = 0) printf(%3d,w); visw = 1; top

15、+; sttop = G-adjlistw.firstarc; break; p = p-nextarc; printf(n);void BFS(ALGraph *G, int v) int i, w; ArcNode *p; int queuemaxx,front = 0,rear = 0; for(i = 0;i n; +i) visi = 0; printf(%3d,v); visv = 1; rear = (rear + 1)%maxx; queuerear = v; while(front != rear) front = (front + 1) % maxx; w = queuef

16、ront; p = G-adjlistw.firstarc; while(p != NULL) if(visp-adjvex = 0) printf(%3d,p-adjvex); visp-adjvex = 1; rear = (rear + 1)%maxx; queuerear = p-adjvex; p=p-nextarc; printf(n);int main() int i, j; int Amaxx6 = 0,5,inf,7,inf,inf, inf,0,4,inf,inf,inf, 8,inf,0,inf,inf,9, inf,inf,5,0,inf,6, inf,inf,inf,

17、5,0,inf, 3,inf,inf,inf,1,0 ; MGraph g, g1; ALGraph *G; g.n = 6; g.e = 10; for(i = 0;i g.n; +i) for(j = 0;j g.n ; +j) g.edgesij = Aij; printf(有向图 G 邻接矩阵:n); DispMat1(g); G = (ALGraph *)malloc(sizeof(ALGraph); printf(图 G 的邻接矩阵转换成邻接表:n); MatTolist(g,G); DispAdj1(G); printf(从顶点 0 开始的DFS(递归算法):n); DFS(G,0); printf(n); printf(从顶点 0 开始的DFS(非递归算法):n); DFS1(G,0); printf(从顶点 0 开始的BFS(非递归算法):n); BFS(G,0); printf(n); return 0;四 实验结果:

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

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