实验五 图操作实现.doc_第1页
实验五 图操作实现.doc_第2页
实验五 图操作实现.doc_第3页
实验五 图操作实现.doc_第4页
实验五 图操作实现.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

_实验五 图操作实现实验日期: 2017 年 4 月 27 日 实验目的及要求1. 熟练掌握图的邻接矩阵和邻接表的存储方式;2. 实现图的一些基本运算,特别是深度优先遍历和广度优先遍历;实验内容用邻接矩阵法建一个无向连通图(顶点信息为顺序字母A,B,C,D.,而非键盘输入),分别用dfs(深度优先搜索)和bfs(广度优先搜索)遍历,输出图中顶点信息并验证。邻接矩阵图类型定义:#define MAX 40 typedef char vexType; /*顶点类型*/ typedef struct vexType vexMAX; int arcsMAXMAX; int vn,en; MGraph; 访问标记数组定义:int visitedMAX; /*值为0时对应顶点未被访问,值为1时对应顶点已被访问 */顺序存储的循环队列类型定义:typedef int datatype; /*队列元素为图的顶点下标,int型*/typedef struct node datatype dataMAX; int front, rear; SeqQueue; /*顺序存储的循环队列类型*/任务1自定义函数库文件Queue.h,完成队列的相关操作。2创建一个程序文件sy15.cpp,自定义相应函数完成以下操作:(1)void createGraph(MGraph *g) /*建邻接矩阵存储的无向图*/(2)void visit(MGraph *g,int v) /*访问v号顶点*/(3)void dfs(MGraph *g,int v) /*邻接矩阵存储的图的深度优先搜索*/(4)void bfs(MGraph *g,int v) /*邻接矩阵存储的图的广度优先搜索*/3回答下列问题(1)现有定义:MGraph *g,并且g指针指向的无向图已创建完成,请写出该图遍历前需初始化visited数组的C程序语句。for (i = 0; i g.vn; i+) /*标记数组初始化*/visitedi = 0;(2)定义函数int count (MGraph *g)统计非连通图的连同分量个数。(说明:借助遍历算法实现)int count (MGraph *g) int i, m=0; for(i=0; ivn; i+) if(visitedi=0) m+; dfs(g, i); return m;4自定义函数库文件Queue.h 与sy15.cpp源程序清单(含必要的注释)Queue.h:#includetypedef int datatype; /*队列元素为图的顶点下标,int型*/typedef struct node datatype dataMAX;int front, rear; SeqQueue; /*顺序存储的循环队列类型*/void InitQueue(SeqQueue *Q); /*初始化队列*/void EnQueue(SeqQueue *Q, int v); /*入队*/datatype DeQueue(SeqQueue *Q); /*出队*/int EmptyQueue(SeqQueue *Q); /*判队空*/int FullQueue(SeqQueue *Q); /*判队满*/void InitQueue(SeqQueue *Q) Q-front = Q-rear = 0;void EnQueue(SeqQueue *Q, int v) if (FullQueue(Q) printf(队列已满!); /*判队满*/return;Q-rear = (Q-rear + 1) % MAX; /*入队*/Q-dataQ-rear = v;datatype DeQueue(SeqQueue *Q) if (EmptyQueue(Q) printf(队列为空!); /*判队空*/return -1;Q-front = (Q-front + 1) % MAX; /*出队*/return Q-dataQ-front;int EmptyQueue(SeqQueue *Q) return Q-front = Q-rear;int FullQueue(SeqQueue *Q) return (Q-rear + 1) % MAX = Q-front;sy5.cpp:#define MAX 40#includeQueue.hint visitedMAX; /*值为0时对应顶点未被访问,值为1时对应顶点已被访问 */typedef char vexType; /*顶点类型*/typedef struct vexType vexMAX;int arcsMAXMAX;int vn, en; MGraph;void createGraph(MGraph *g); /*建邻接矩阵存储的无向图*/void visit(MGraph *g, int v); /*访问v号顶点*/void dfs(MGraph *g, int v); /*邻接矩阵存储的图的深度优先搜索*/void bfs(MGraph *g, int v); /*邻接矩阵存储的图的广度优先搜索*/void createGraph(MGraph *g) int i, j, v;char a = A;printf(输入顶点数:); /*输入顶点数和边数*/scanf(%d, &g-vn);printf(输入边数:);scanf(%d, &g-en);for (i = 0; i vn; i+) /*二维数组初始化*/for (j = 0; j vn; j+) g-arcsij = 0;for (v = 0; v vn; v+) /*确定数据*/g-vexv = a;a+;printf(输入结构:n); /*确定边*/for (v = 0; v en; v+) scanf(%d %d, &i, &j);g-arcsij = 1;g-arcsji = 1;void visit(MGraph *g, int v) printf(%c, g-vexv);void dfs(MGraph *g, int v) int j;visit(g, v); /*输出数据*/visitedv = 1; /*标记已访问*/for (j = 0; j vn; j+) if (g-arcsvj = 1 & visitedj = 0) dfs(g, j); /*递归*/void bfs(MGraph *g, int v) int i, w;SeqQueue Q;InitQueue(&Q); /*队列初始化*/EnQueue(&Q,v); /*入队*/visitedv = 1; /*标记已访问*/while (!EmptyQueue(&Q) w = DeQueue(&Q); /*出队*/visit(g, w); /*输出数据*/for (i = 0; i vn; i+) if (g-arcswi = 1 & visitedi = 0) EnQueue(&Q, i); /*入队*/visitedi = 1; /*标记已访问*/void main() MGraph g;int i, v;createGraph(&g); /*建图*/for (i = 0; i g.vn; i+) /*标记数组初始化*/visitedi = 0;printf(开始顶点:); /*输入遍历开始顶点*/scanf(%d, &v);printf(输出(dfs):); /*DFS输出*/dfs(&g, v);printf(n);for (i = 0; i g.vn; i+) /*标记数

温馨提示

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

评论

0/150

提交评论