[2018年最新整理]图的遍历正文.docVIP

  • 0
  • 0
  • 约5.42千字
  • 约 8页
  • 2018-04-15 发布于浙江
  • 举报
[2018年最新整理]图的遍历正文

需求分析 本演示程序中,元素限定为char型。 演示程序以用户和计算机的对话方式执行,即在计算机终端显示“提示信息“后,由用户在键盘上输入符合演示程序中规则的图的边数,结点数;相应的先序和按层遍历会显示其后。 程序执行命令包括:1)根据用户给出的图字符串进行对临接表的先序构建 2)输出构建的临接表 概要设计 为实现上述程序功能,需要三个抽象数据类型:队列和图 1.图的抽象数据类型定义为: ADT Graph{ 数据对象V:顶点集 数据关系R:R={VR} VR={v,w|v,w(V,v,w表示从v到w的弧} 基本操作: CreateGraph(G,V,VR); //构造图 DestroyGraph(G); //销毁图 LocateVex(G,u); //顶点u在图中位置 GetVex(G,v);//取顶点v的值 PutVex(G,v,value); //顶点v赋值 FirstAdjVex(G,v); //v的第一个邻接点 NextAdjVex(G,v,w); //v相对于w的下一个邻接点 InsertVex(G,v); //增添顶点v DeleteVex(G,v); //删除顶点v及相关弧 InsertArc(G,v,w); //增添弧v,w DeleteArc(G,v,w); //删除弧v,w DFSTraverse(G,v,Visit()); //深度优先搜索DFS BFSTraverse(G,v,Visit()); //广度优先搜索BFS } 本程序包含四个模块: 1)主程序模块: main() { 初始化一个空队列;(利用CreateQueue(Q);函数) 进入用户输入图顶点数和边数阶段; 进入用户输入图的边信息阶段; 根据用户输入的图的边信息进行对邻接表的构建(利用CreateGraph(G);这个函数)输出邻接表两种遍历输出构建的邻接表(利用DFS(q,i); BFS(G);这2个函数) } 图单元模块-------实现图抽象数据类型。 邻接表2种遍历单元模块(包含队列单元模块) 4) 图节点结构单元模块-------定义图的节点结构。 各模块是之间关系如下: 主程序模块 图单元模块- 邻接表2种遍历单元模块 图节点结构单元模块 详细设计 元素类型(此程序固定为char) 结点类型 typedef struct{ int *base; int *top; int length; }Queue; //队列结点 typedef struct arcNode{ int locate; struct arcNode *next; }arcNode; //边结点 typedef struct VNode{ char data; arcNode *firstarc; }VNode,V[20]; //顶点结点 typedef struct { int vexnum,arcnum; char kind; V vex; }ALGraph; //图 2图的基本操作: CreatGraph(ALGraph *p) //创建邻接表 DFS(VNode *p,int a); //先序遍历邻接表 BFS(G); //按层遍历邻接表 图所有操作代码: void CreatGraph(ALGraph *p){ int i,arc1,arc2; char a,b; arcNode *m,*n; printf(\n Please enter the vexnum,the arcnum and the kind of this Graph.\n); scanf(%d,(*p).vexnum); scanf(%d,(*p).arcnum); printf(\n Please enter the data of the vex.(Must Be Different!!!)\n); for(i=0;i(*p).vexnum;i++){ (*p).vex[i].data=getche(); (*p).vex[i].firstarc=NULL; } printf(\n\n Please enter the arc of this Graph,such as ac.\n); for(i=0;i(*p).arcnum;i++){ a=getche(); b=getche(); arc1=Locate(a); arc2=L

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档