[2018年最新整理]图的广度遍历____课程设计报告.docVIP

  • 8
  • 0
  • 约1.12万字
  • 约 26页
  • 2018-04-15 发布于浙江
  • 举报

[2018年最新整理]图的广度遍历____课程设计报告.doc

[2018年最新整理]图的广度遍历____课程设计报告

目 录 1.需求分析 1 1.1问题描述 1 1.2系统功能 1 2.概要设计 2 2.1 流程图 2 2.2结构体、函数及说明 3 3.详细设计 4 3.1遍历函数设计 4 3.2容错性方法设计 4 3.3生成邻接表设计 5 3.4邻接表遍历设计 6 4.程序源代码 7 5.调试分析和测试结果 16 5.1调试分析 16 5.1调试案例 16 5.3测试过程、结果截图: 17 5.3.1容错性测试: 17 5.3.2无向图(案例一)测试: 20 5.3.3有向图(案例二)测试: 22 6.课程设计总结 24 参考文献 25 1.需求分析 1.1问题描述 (1)对任意给定的图(顶点数和边数自定),建立它的邻接表并输出。 (2)然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。 (3)画出搜索顺序示意图。 1.2系统功能 (1)首先输入图的类型,有向或无向图(因为遍历与权值无关,所以没有涉及带权图)。然后输入图的顶点数、边数和各条边,之后生成该图的邻接表并输出。 (2)再输入要遍历该图的起点,然后从所输入的点广度搜索该图的邻接表,并按遍历顺序输出顶点内容。之后决定是否继续遍历该图或输入另一个需要遍历的图亦或是结束程序。 2.概要设计 2.1流程图 是 否 否 是 图 2-1 流程图 2.2结构体、函数及说明 typedef struct ArcNode//邻接表表结点 { int adjvex;//该弧所指向的顶点位置 struct ArcNode *nextarc;//指向下一条弧的指针 //InfoType *info;//该弧相关信息指针 }ArcNode; typedef struct VNode//邻接表头结点 { VertexType data;//结点信息 ArcNode *firstarc;//指向第一条依附该结点的弧的指针 }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct//图 { AdjList Vertices;//邻接表头结点数组 int vexnum,arcnum;//图的当前顶点数和弧数 int kind;//图的种类标志(有向图:0,无向图:1) }ALGraph; void print(int v)//输出顶点信息 int FirstAdjVex(ALGraph G,int u)//在邻接表G中取第u个头结点 void NextAdjVex(ALGraph G,int u,int w)// 在邻接表G中取第u个头结点之后的结点w的下一结点 void BFSTraverse(ALGraph G,queueint Q,bool visited[],int m,int n,void (*Visit)(int))//使用辅助队列Q从邻接表结点m开始n结束广度遍历邻接表图G 3.详细设计 3.1遍历函数设计 void BFSTraverse(ALGraph G,queueint Q,bool visited[],int m,int n,void (*Visit)(int))//使用辅助队列Q从邻接表结点m开始n结束广度遍历邻接表图G { //按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。 while(!Q.empty()) Q.pop();//置空的辅助队列Q for(int v=m;vn;++v) if(!visited[v])//如果v尚未访问 { visited[v]=true; Visit(v);//访问v Q.push(v);//v入队列 while(!Q.empty()) { int u = Q.front(); Q.pop();//对头元素出队并置为u for( int w = FirstAdjVex(G,u); w = 0; w = NextAdjVex(G,u,w))//从以u为头结点的邻接表开始遍历到链表中的最后一个结点 if(!visited[w])//w为u的尚未访问的邻接结点 { visited[w]=true; Visit(w);//访问w Q.push(w);//w入队列 }//if }//while }//if }//BFSTraverse*/ 3.2容错性方法设计 cout\n请输入图的弧

文档评论(0)

1亿VIP精品文档

相关文档