- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图广度遍历课程设计报告
目 录
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)