图的深度广度优先遍历操作代码

图的深度广度优先遍历操作代码

ID:38519726

大小:163.50 KB

页数:14页

时间:2019-06-14

图的深度广度优先遍历操作代码_第1页
图的深度广度优先遍历操作代码_第2页
图的深度广度优先遍历操作代码_第3页
图的深度广度优先遍历操作代码_第4页
图的深度广度优先遍历操作代码_第5页
资源描述:

《图的深度广度优先遍历操作代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、实验目的1.掌握图的各种存储结构,特别要熟练掌握邻接矩阵和邻接表存储结构;2.遍历是图各种应用的算法的基础,要熟练掌握图的深度优先遍历和宽度优先遍历算法,复习栈和队列的应用;3.掌握图的各种应用的算法:图的连通性、连通分量和最小生成树、拓扑排序、关键路径。二、实验内容实验内容1**图的遍历[问题描述]许多涉及图上操作的算法都是以图的遍历为基础的。写一个程序,演示在连通无向图上遍历全部顶点。[基本要求]建立图的邻接表的存储结构,实现无向图的深度优先遍历和广度优先遍历。以用户指定的顶点为起点,分别输出每种遍历下的顶点访问序列。[实现提示]设

2、图的顶点不超过30个,每个顶点用一个编号表示(如果一个图有N个顶点,则它们的编号分别为1,2,…,N)。通过输入图的全部边输入一个图,每条边是两个顶点编号对,可以对边依附顶点编号的输入顺序作出限制(例如从小到大)。[编程思路]首先图的创建,采用邻接表建立,逆向插入到单链表中,特别注意无向是对称插入结点,且要把输入的字符在顶点数组中定位(LocateVex(GraphG,char*name),以便后来的遍历操作,深度遍历算法采用递归调用,其中最主要的是NextAdjVex(GraphG,intv,intw);FirstAdjVex()函数的书

3、写,依次递归下去,广度遍历用队列的辅助。[程序代码]头文件:#include#include#defineMAX_VERTEX_NUM30#defineMAX_QUEUE_NUMBER30#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineTRUE1#defineFALSE0typedefintStatus;typedefintInfoType;typedefintStatus;/*定义弧的结构*/typedefstruct

4、ArcNode{intadjvex;/*该边所指向的顶点的位置*/structArcNode*nextarc;/*指向下一条边的指针*/InfoTypeinfo;/*该弧相关信息的指针*/}ArcNode;/*定义顶点的结构*/typedefstructVNode{chardata[40];/*顶点信息*/ArcNode*firstarc;/*指向第一条依附该顶点的弧的指针*/}VNode,AdjList[MAX_VERTEX_NUM];/*定义图的结构*/typedefstruct{AdjListvertices;intvexnum,ar

5、cnum;/*图的当前顶点数和弧数*/intkind;/*图的类型标志*/}Graph;/*定义队列的结构*/typedefstruct{int*elem;intfront,rear;}Queue;/*功能选择*/voidMenuSelect(intw);/*顶点定位*/intLocateVex(GraphG,char*name);/*创建无向图*/voidCreateGraph(Graph&G);/*求第一个顶点*/intFirstAdjVex(GraphG,intv);/*求下一个顶点*/intNextAdjVex(GraphG,int

6、v,intw);/*深度递归*/voidDFS(GraphG,intv);/*深度遍历*/voidDFSTravel(GraphG,intv);/*广度遍历*/voidBFSTraverse(GraphG,char*name);/*初始化队列*/StatusInitQueue(Queue&Q);/*判空*/StatusEmptyQueue(QueueQ);/*进队*/StatusEnQueue(Queue&Q,inte);/*出队*/StatusDeQueue(Queue&Q,int&e);实现文件:#include#in

7、clude"malloc.h"#include"tuhead.h"#include"stdlib.h"#include"string.h"boolvisited[MAX_VERTEX_NUM];/************************************************************顶点定位************************************************************/intLocateVex(GraphG,char*name){inti;for(i=1;i<=G.v

8、exnum;i++)//从1号位置开始存储if(strcmp(name,G.vertices[i].data)==0)//相等则找到,返回位序returni;return-1;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。