数据结构的课件实验七图的遍历_第1页
数据结构的课件实验七图的遍历_第2页
数据结构的课件实验七图的遍历_第3页
数据结构的课件实验七图的遍历_第4页
数据结构的课件实验七图的遍历_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验七 图的遍历实验内容 1. 图的邻接表的存储结构图的邻接表的存储表示typedef struct ArcNode /*弧的结点结构类型*/int adjvex; /*该弧的终点位置*/ struct ANode *nextarc; /*指向下一条弧的指针*/ InfoType info; /*该弧的相关信息,这里用于存放权值*/ ArcNode;typedef struct Vnode /*邻接表头结点的类型*/Vertex data; /*顶点信息*/ ArcNode *firstarc; /*指向第一条依附该顶点的弧的指针*/ VNode;typedef VNode AdjListMAXV; /*AdjList是邻接表类型*/typedef struct AdjList adjlist; /*邻接表*/ int n,e; /*图的当前顶点数和弧数*/ ALGraph; /*图的邻接表存储结构定义*/2. 图的邻接表的基本操作 (1)深度优先搜索递归操作。(2)深度优先搜索非递归操作。(3)广度优先搜索递归操作。3. 图的邻接表操作实现的步骤(1)实现将图的邻接表的存储结构和基本操作程序代码。(2)实现main主函数。4.程序代码完整清单#include #include #defineMAXV 100/*最大顶点个数*/int visitedMAXV;/*全局数组*/typedef int InfoType;/*以下定义邻接矩阵类型*/typedef struct int no;/*顶点编号*/InfoType info;/*顶点其他信息*/ VertexType;/*顶点类型*/typedef struct /*图的定义*/ int edgesMAXVMAXV; /*邻接矩阵*/ int vexnum,arcnum; /*顶点数,弧数*/VertexType vexsMAXV;/*存放顶点信息*/ MGraph;/*图的邻接矩阵类型*/*以下定义邻接表类型*/typedef struct ANode /*弧的结点结构类型*/int adjvex; /*该弧的终点位置*/ struct ANode *nextarc; /*指向下一条弧的指针*/ InfoType info; /*该弧的相关信息,这里用于存放权值*/ ArcNode;typedef int Vertex;typedef struct Vnode /*邻接表头结点的类型*/Vertex data; /*顶点信息*/ ArcNode *firstarc; /*指向第一条弧*/ VNode;typedef VNode AdjListMAXV;/*AdjList是邻接表类型*/typedef struct AdjList adjlist; /*邻接表*/ int n,e; /*图中顶点数n和边数e*/ ALGraph; /*图的邻接表类型*/ void MatToList(MGraph,ALGraph *&); /*将邻接矩阵g转换成邻接表G*/ void DispAdj(ALGraph *G); /*输出邻接表G*/ void DFS(ALGraph *G,int v); /*深度优先搜索递归算法*/ void DFS1(ALGraph *G,int v); /*深度优先搜索非递归算法*/ void BFS(ALGraph *G,int v); /*广度优先搜索递归算法*/void main()int i,j;MGraph g;ALGraph *G;int AMAXV6=0,5,0,7,0,0,0,0,4,0,0,0,8,0,0,0,0,9,0,0,5,0,0,6,0,0,0,5,0,0,3,0,0,0,1,0;g.vexnum=6;g.arcnum=10;for (i=0;ig.vexnum;i+)/*建立图的邻接矩阵*/for (j=0;jg.vexnum;j+)g.edgesij=Aij;G=(ALGraph *)malloc(sizeof(ALGraph);MatToList(g,G);/*图G的邻接矩阵转换成邻接表*/printf(图G的邻接表:n);DispAdj(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);void MatToList(MGraph g,ALGraph *&G) /*将邻接矩阵g转换成邻接表G*/int i,j,n=g.vexnum;/*n为顶点数*/ArcNode *p;G=(ALGraph *)malloc(sizeof(ALGraph);for (i=0;iadjlisti.firstarc=NULL;for (i=0;i=0;j-)if (g.edgesij!=0)/*邻接矩阵的当前元素不为0*/ p=(ArcNode *)malloc(sizeof(ArcNode);/*创建一个结点*p*/p-adjvex=j;p-info=g.edgesij;p-nextarc=G-adjlisti.firstarc;/*将*p链到链表后*/G-adjlisti.firstarc=p;G-n=n;G-e=g.arcnum;void DispAdj(ALGraph *G) /*输出邻接表G*/int i;ArcNode *p;for (i=0;in;i+)p=G-adjlisti.firstarc;if (p!=NULL) printf(%3d: ,i);while (p!=NULL)printf(%3d,p-adjvex);p=p-nextarc;printf(n);void DFS(ALGraph *G,int v) /*深度优先搜索递归算法*/ArcNode *p;visitedv=1; /*置已访问标记*/printf(%3d,v); /*输出被访问顶点的编号*/p=G-adjlistv.firstarc; /*p指向顶点v的第一条弧的弧头结点*/while (p!=NULL) if (visitedp-adjvex=0)/*若p-adjvex顶点未访问,递归访问它*/DFS(G,p-adjvex); p=p-nextarc; /*p指向顶点v的下一条弧的弧头结点*/void DFS1(ALGraph *G,int v) /*深度优先搜索非递归算法*/int i,visitedMAXV,StMAXV,top=-1;ArcNode *p; for (i=0;in;i+) visitedi=0;/*结点访问标志均置成0*/ printf(%3d,v);/*访问顶点v*/top+;/*v入栈*/Sttop=v;visitedv=1;while (top=-1)/*栈不空时循环*/v=Sttop;top-;/*取栈顶顶点*/p=G-adjlistv.firstarc; while (p!=NULL & visitedp-adjvex=1) p=p-nextarc; if (p=NULL)/*若没有退到前一个*/top-;else/*若有,选择一个*/v=p-adjvex;printf(%3d,v);/*访问顶点*/visitedv=1;top+;/*入栈*/Sttop=v;printf(n); void BFS(ALGraph *G,int v) /*广度优先搜索递归算法*/ArcNode *p;int queueMAXV,front=0,rear=0;/*定义循环队列并初始化*/int visitedMAXV; /*定义存放结点的访问标志的数组*/int w,i;for (i=0;in;i+) visitedi=0;/*访问标志数组初始化*/printf(%3d,v); /*输出被访问顶点的编号*/visitedv=1; /*置已访问标记*/rear=(rear+1)%MAXV;queuerear=v; /*v进队*/while (front!=rear) /*若队列不空时循环*/front=(front+1)%MAXV;w=queuefront; /*出队并赋给w*/p=G-adjlistw.firstarc; /*找与顶点w邻接的第一个顶点*/while (p!=NULL) if (visitedp-adjvex=0) /*若当前邻接顶点未被访问*/printf(%3d,p-adjvex); /*访问相邻顶点*/visitedp-adjvex=1;/*置该顶点已被访问的标志*/rear=(rear+1)%MAXV;/*该顶点进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论