实现图的遍历算法 1. 需求分析 对于下图G,编写一个程序输出从顶点0 开始的深度优先遍历序列(非递归算法)和广度优先遍历序列(非递归算法)
2. 系统设计 1.用到的抽象数据类型的定义 图的抽象数据类型定义: ADT Graph{ 数据对象V:V 是具有相同特性的数据元素的集合,称为顶点集 数据关系R: R={VR} VR={|v,w∈V 且P(v,w),表示从v 到w 的弧, 谓词P(v,w)定义了弧的意义或信息} 基本操作P: CreatGraph(&G,V,VR) 初始条件:V 是图的顶点集,VR 是图中弧的集合 操作结果:按V 和VR 的定义构造图G DestroyGraph(&G) 初始条件:图G 存在 操作结果:销毁图G InsertVex(&G,v) 初始条件:图G 存在,v 和图中顶点有相同特征 操作结果:在图G 中增添新顶点v …… InsertArc(&G,v,w) 初始条件:图G 存在,v 和w 是G 中两个顶点 操作结果:在G 中增添弧,若 G 是无向的则还增添对称弧 …… DFSTraverse(G,Visit()) 初始条件:图G 存在,Visit 是顶点的应用函数 操作结果:对图进行深度优先遍历,在遍历过程中对每个顶点调用函数Visit 一次且仅一次
一旦 Visit()失败,则操作失败 BFSTraverse(G,Visit()) 初始条件:图G 存在,Visit 是顶点的应用函数 操作结果:对图进行广度优先遍历,在遍历过程中对每个顶点调用函数Visit 一次且仅一次
一旦Visit()失败,则操作失败 }ADT Graph 栈的抽象数据类型定义: ADT Stack{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={|ai-1,ai∈D,i=2,…,n} 约定an 端为栈顶,ai 端为栈底 基