




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图的遍历一问题描述对给定图,实现图的深度优先遍历和广度优先遍历。二基本要求以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。三测试数据由学生依据软件工程的测试技术自己确定四概要设计/邻接矩阵typedef struct ArcCell int adj; ArcCell *info;ArcCell, AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct char vexsMAX_VERTEX_NUM; AdjMatrix arcs; int vexnum,arcnum;MGraph;/邻接表typedef struct ArcNode /定义边结点 int adjvex; ArcNode *nextarc;ArcNode;typedef struct VNode /定义顶点结点 char data; ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct /定义无向图 AdjList vertices; int vexnum,arcnum;ALGraph;typedef struct node /定义结点 char data; node *next;*Link;typedef struct /定义链表 Link head,tail; int len;LinkList;/关于邻接表图的操作int InitList(LinkList &L)/构造一个带头结点和尾结点的空的线性链表Lvoid add(LinkList &L,int e)/在线性链表L的结尾添加一个结点void Delete(LinkList &L,int &e)/出列,并将出列的元素值用e返回void ArcAdd(ALGraph &G,int m,int n)/在无向图中添加以m,n为顶点的边void CreateDG(ALGraph &G) /创建无向图void show(ALGraph G) /在屏幕上输入无向图的邻接表存储形式void VisitFunc(char a) /对无向图的数据进行访问的函数int FirstAdjVex(ALGraph G,int v)/返回v的第一个邻接顶点。若顶点在G中没有邻接表顶点,则返回“空”。int NextAdjVex(ALGraph G,int v,int w) /返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接点,则返回“回”。bool visitMAX_VERTEX_NUM;void DFS(ALGraph G,int v)/从第v个顶点出发递归地深度优先遍历图G。void DFSTraverse(ALGraph G)/对图G作深度优先遍历。void BFSTraverse(ALGraph G)/对图G作广度优先遍历。/关于邻接矩阵的操作int LocateVex(MGraph G,char v)int FirstAdjVex(MGraph G,int v)int NextAdjVex(MGraph G,int v,int w)void CreatUDG(MGraph &G)/邻接矩阵的无向图的创建void CreatDG(MGraph &G)/有向图邻接矩阵的创建bool visitedMAX_VERTEX_NUM;void DFS(MGraph G,int v)void DFSTraverse(MGraph G,int v)void print1(MGraph G)五、详细设计/邻接表的创建void CreateDG(ALGraph &G) /创建无向图 cout请输入顶点个数和边数:G.vexnumG.arcnum; cout请输入顶点值:endl; for(int i=1;it; G.verticesi.data=t; G.verticesi.firstarc=NULL; int m,n; for(int k=1;k=G.arcnum;k+) cout请输入第k条边的两个顶点:mn; if(m=G.vexnum&n0&n0) ArcAdd(G,m,n); ArcAdd(G,n,m); else coutERROR.endl; /在屏幕上输入无向图的邻接表存储形式void show(ALGraph G) cout无向图的创建完成,该图的邻接表表示为:endl; ArcNode *p; for(int i=1;i=G.vexnum;i+) if(G.verticesi.firstarc=NULL) coutiG.verticesi.dataNULLendl; else p=G.verticesi.firstarc; coutiG.verticesi.data; while(p-nextarc!=NULL) coutadjvex; p=p-nextarc; coutadjvexNULLendl; void DFSTraverse(ALGraph G)/对图G作深度优先遍历。 cout深度优先搜索的结果为:endl; for(int v=1;v=G.vexnum;v+) visitv=false; for(int m=1;m=G.vexnum;m+) if(!visitm) DFS(G,m); coutendl;void BFSTraverse(ALGraph G)/对图G作广度优先遍历。 cout广度优先搜索的结果为:endl; LinkList Q; int u; for(int m=1;m=G.vexnum;m+) visitm=false; InitList(Q);/借助辅助队列。 for(int v=1;v=1;w=NextAdjVex(G,u,w) if(!visitw) visitw=true; VisitFunc(G.verticesw.data); add(Q,w); coutendl;void CreatUDG(MGraph &G)/邻接矩阵的无向图的创建int i,j,k,w;char v1,v2;cout请输入顶点个数和边数:G.vexnumG.arcnum; cout请输入G.vexnum个顶点的值:endl; for(i=0;iG.vexsi; for(i=0;iG.vexnum;+i) for(j=0;jG.vexnum;+j) G.arcsij.adj=0; G.=NULL; for( k=1;k=G.arcnum;+k) cout请输入第k条边的两个顶点值和它们的权重:v1v2w; i=LocateVex(G,v1); j=LocateVex(G,v2); G.arcsij.adj=w; G.arcsji=G.arcsij; void DFSTraverse(MGraph G,int v)/对邻接矩阵图的递归深度遍历visitedv=true;coutG.vexsv=0;w=NextAdjVex(G,v,w)/=if(!visitedw) DFSTraverse(G,w);六、调试分析在写邻接矩阵的NextAdjVex功能的时候,i从w开始,但是遍历到一半就停止了,后来发现第W个已经遍历过了,所以一直在循环遍历第W个,所以改成w+1。在写邻接矩阵无向图的深度优先遍历时,for(int w=Firs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电商内容营销自动化工具创新创业项目商业计划书
- 农畜产品天然成分提取创新创业项目商业计划书
- 农产品产地直销网络创新创业项目商业计划书
- 2025年学前教育机构师资队伍教师培训效果评价与反馈体系报告
- 2025年工业互联网平台NFV虚拟化在5G网络中的应用场景报告
- 2025年工业节能技术改造资金申请项目申报条件与评估报告
- 2025年教育行业人才流失现状与吸引力建设策略报告
- 2025年网络直播行业规范化与直播平台国际化发展商业模式创新报告
- 甘肃省定西市岷县2021-2022学年第一学期五年级科学期中试题(含答案)
- 营养师考试2025年备考实操技能与营养调查模拟试卷
- 中级政工考试题库及答案
- 2025年高考英语新课标Ⅱ卷点评及2026备考方向 课件
- 2025广西专业技术人员公需科目培训考试答案
- 员工赔偿金保密协议书(2篇)
- 大班 语言社会 我升大班啦 课件
- 项目造价咨询计划表
- 幼儿园玩教具操作与活动指导
- 敏捷项目管理实践指南
- 《数据结构》课件(完整版)
- 项目管理(PMBOK)讲义全套
- 友声收银系列电子秤使用说明书
评论
0/150
提交评论