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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

图的深度优先遍历实验报告.docx

1、图的深度优先遍历实验报告一 实验目的熟悉图的存储结构,掌握用单链表存储数据元素信息和数据元素之间的关系的信息的方法,并能运用图的深度优先搜索遍历一个图,对其输出。二 实验原理深度优先搜索遍历是树的先根遍历的推广。假设初始状态时图中所有顶点未曾访问,则深度优先搜索可从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有与v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。图的邻接表的存储表示:#define MAX_VERTEX_NUM 20#define MAXN

2、AME 10typedef char VertexTypeMAXNAME;typedef struct ArcNode int adjvex; struct ArcNode *nextarc;ArcNode;typedef struct VNode VertexType data; ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices; int vexnum,arcnum; int kind;ALGraph;三实验内容编写LocateVex函数,Create函数,print函数,main函数,

3、输入要构造的图的相关信息,得到其邻接表并输出显示。四。实验步骤1) 结构体定义,预定义,全局变量定义。#includestdio.h#includestdlib.h#includestring.h#define FALSE 0#define TRUE 1#define MAX 20typedef int Boolean;#define MAX_VERTEX_NUM 20#define MAXNAME 10typedef char VertexTypeMAXNAME;typedef struct ArcNode int adjvex; struct ArcNode *nextarc;ArcNod

4、e;typedef struct VNode VertexType data; ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices; int vexnum,arcnum; int kind;ALGraph;ALGraph G;Boolean visitedMAX;int degreeMAX_VERTEX_NUM;/定义一个数组求每一个顶点的总度数(无向图)或出度(有向图)。2) 编写LocateVex函数,确定所输入的边在G中的位置,返回该边所在的行数或或列数。int LocateVex(A

5、LGraph G,VertexType v) int i,n; for(n=0;nG.vexnum;n+) if(strcmp(v,G.verticesn.data)=0) i=n; return i;3)编写Create函数,采用邻接表构造图G,返回结构体变量G的值,并统计每一个顶点的总度数或出度。ALGraph Create(ALGraph G) int i,j,k;VertexType v1,v2;ArcNode *p; printf(请输入要构造的图的顶点数和弧数:n); scanf(%d%d,&G.vexnum,&G.arcnum); printf(请输入每一个顶点的名字:n); f

6、or(i=0;iG.vexnum;i+) scanf(%s,&G.verticesi.data); G.verticesi.firstarc=NULL; printf(各顶点的位置以及名称为:n); for(i=0;iG.vexnum;i+) printf(%6d%6sn,i,G.verticesi.data); printf(请输入要构造的是无向图还是有向图:无向用0表示,有向用1表示:n); scanf(%d,&G.kind); for(i=0;iG.vexnum;i+) degreei=0; printf(请输入每条弧的始点和终点:n); if(G.kind=1) for(k=0;kad

7、jvex=j; p-nextarc=G.verticesi.firstarc; G.verticesi.firstarc=p; degreei+; if(G.kind=0) for(k=0;kadjvex=j; p-nextarc=G.verticesi.firstarc; G.verticesi.firstarc=p; degreei+; p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=i; p-nextarc=G.verticesj.firstarc; G.verticesj.firstarc=p; degreej+; return G;4)编写

8、print函数,实现对所构建的图的邻接表的输出。 void print(ALGraph G) int i; ArcNode *p; for(i=0;inextarc) printf(%6d,p-adjvex); printf(n); if(G.kind=1) printf(出度为:%6dn,degreei); if(G.kind=0) printf(总度数为:%6dn,degreei); 5)编写FirstAdjVex函数,返回v的第一个邻接点的编号。int FirstAdjVex(ALGraph G,int v) ArcNode *p; p=G.verticesv.firstarc; if(

9、p) return(p-adjvex); else return -1;6)编写NextAdjVex函数,返回v第一个之后未被访问过的下一个邻接点。int NextAdjVex(ALGraph G,int v,int w) ArcNode *p;int i; for(p=G.verticesv.firstarc;p;p=p-nextarc) if(w!=p-adjvex) i=0; else i=1; if(i&p) return p-nextarc-adjvex; else return -1; 7)编写DFS函数,从第i个顶点出发递归地深度优先遍历图G。void DFS(ALGraph G

10、,int v) int w; visitedv=TRUE; printf(%sn,G.verticesv.data); for(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w) if(!visitedw) DFS(G,w);8)编写DFSTraverse函数,对图G作深度优先遍历。void DFSTraverse(ALGraph G) int v; for(v=0;vG.vexnum;+v) visitedv=FALSE; for(v=0;vG.vexnum;+v) if(!visitedv) DFS(G,v);9)编写main函数,把以上几个函数结合到一起

11、,用邻接表实现对一个图的构造,输入要构造的边的相关信息(总弧数,顶点数,边的两个顶点的名称,有向图还是无向图),对其进行输出显示,并用深度优先搜索的方法遍历所构建的图。 main() ALGraph G; G=Create(G); printf(邻接表为:n); print(G); printf(深度遍历的结果为:n); DFSTraverse(G);五 实验结果源程序代码:#includestdio.h#includestdlib.h#includestring.h#define FALSE 0#define TRUE 1#define MAX 20typedef int Boolean;#

12、define MAX_VERTEX_NUM 20#define MAXNAME 10typedef char VertexTypeMAXNAME;typedef struct ArcNode int adjvex; struct ArcNode *nextarc;ArcNode;typedef struct VNode VertexType data; ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices; int vexnum,arcnum; int kind;ALGraph;ALGraph

13、 G;Boolean visitedMAX;int degreeMAX_VERTEX_NUM;int LocateVex(ALGraph G,VertexType v) int i,n; for(n=0;nG.vexnum;n+) if(strcmp(v,G.verticesn.data)=0) i=n; return i;ALGraph Create(ALGraph G) int i,j,k;VertexType v1,v2;ArcNode *p; printf(请输入要构造的图的顶点数和弧数:n); scanf(%d%d,&G.vexnum,&G.arcnum); printf(请输入每一

14、个顶点的名字:n); for(i=0;iG.vexnum;i+) scanf(%s,&G.verticesi.data); G.verticesi.firstarc=NULL; printf(各顶点的位置以及名称为:n); for(i=0;iG.vexnum;i+) printf(%6d%6sn,i,G.verticesi.data); printf(请输入要构造的是无向图还是有向图:无向用0表示,有向用1表示:n); scanf(%d,&G.kind); for(i=0;iG.vexnum;i+) degreei=0; printf(请输入每条弧的始点和终点:n); if(G.kind=1)

15、 for(k=0;kadjvex=j; p-nextarc=G.verticesi.firstarc; G.verticesi.firstarc=p; degreei+; if(G.kind=0) for(k=0;kadjvex=j; p-nextarc=G.verticesi.firstarc; G.verticesi.firstarc=p; degreei+; p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=i; p-nextarc=G.verticesj.firstarc; G.verticesj.firstarc=p; degreej+; r

16、eturn G;void print(ALGraph G) int i; ArcNode *p; for(i=0;inextarc) printf(%6d,p-adjvex); printf(n); if(G.kind=1) printf(出度为:%6dn,degreei); if(G.kind=0) printf(总度数为:%6dn,degreei); int FirstAdjVex(ALGraph G,int v) ArcNode *p; p=G.verticesv.firstarc; if(p) return(p-adjvex); else return -1;int NextAdjVe

17、x(ALGraph G,int v,int w) ArcNode *p;int i; for(p=G.verticesv.firstarc;p;p=p-nextarc) if(w!=p-adjvex) i=0; else i=1; if(i&p) return p-nextarc-adjvex; else return -1; void DFS(ALGraph G,int v) int w; visitedv=TRUE; printf(%sn,G.verticesv.data); for(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w) if(!visite

18、dw) DFS(G,w);void DFSTraverse(ALGraph G) int v; for(v=0;vG.vexnum;+v) visitedv=FALSE; for(v=0;vG.vexnum;+v) if(!visitedv) DFS(G,v);main() ALGraph G; G=Create(G); printf(邻接表为:n); print(G); printf(深度遍历的结果为:n); DFSTraverse(G);构造一个无向图G,如图所示。图G 运行结果截图:实验结果显示:遍历的结果为:v1-v3-v7-v6-v2-v5-v8-v4。运行成功。六 实验结论可以运用深度优先搜索的方法遍历一个用邻接表构建的图。

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

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