没有合适的资源?快使用搜索试试~ 我知道了~
数据结构 课程设计 - 图的遍历(深度、广度)
4星 · 超过85%的资源 需积分: 10 24 下载量 158 浏览量
2012-02-29
15:40:53
上传
评论 4
收藏 517KB DOC 举报
温馨提示
试读
18页
数据结构结课时的作业 实现了图的遍历(深度、广度、各自递归、非递归实现)
资源推荐
资源详情
资源评论
个人结课作业,谢谢分享,请勿随意转载
说明:需要源码的可以在该网站下载
《数据结构 图的遍历(实现代码).zip》
数据结构课程设计
——图的遍历的实现
目录
个人结课作业,谢谢分享,请勿随意转载
一、 题目:........................................................................................................................................2
二、 整体说明:................................................................................................................................2
1、整体结构...............................................................................................................................2
2、图的创建...............................................................................................................................2
三、 遍历算法....................................................................................................................................2
1:深度优先遍历 DFS..............................................................................................................3
算法思想.............................................................................................................................3
递归算法实现(C 代码).................................................................................................3
非递归算法实现(C 代码).............................................................................................3
2:广度优先遍历 BFS..............................................................................................................4
算法思想.............................................................................................................................4
递归算法(C 代码).........................................................................................................4
非递归算法(C 代码).....................................................................................................5
四、 邻接矩阵存储实现....................................................................................................................5
1、邻接矩阵的存储表示...........................................................................................................5
2、图的创建...............................................................................................................................6
有向图.................................................................................................................................6
无向图.................................................................................................................................7
2、辅助函数...............................................................................................................................8
第一个邻接顶点查找函数 FirstAdjVex(Graph G, int v)..................................................8
下一个邻接顶点查找函数 NextAdjVex(Graph G, int v, int w).......................................8
五、 邻接表存储实现........................................................................................................................8
1、邻接矩阵的存储表示...........................................................................................................8
2、图的创建...............................................................................................................................9
说明:.................................................................................................................................9
函数.............................................................................................................................................9
3、辅助函数.............................................................................................................................10
第一个邻接顶点查找函数...............................................................................................10
下一个邻接顶点查找函数...............................................................................................10
六、 队列结构以及栈实现..............................................................................................................10
1、队列的存储表示.................................................................................................................10
2、队列的实现.........................................................................................................................11
3、栈的实现.............................................................................................................................11
说明:...............................................................................................................................11
函数代码...........................................................................................................................12
七、 程序测试..................................................................................................................................12
1、主函数.................................................................................................................................12
2、深度遍历测试.....................................................................................................................12
测试用图...........................................................................................................................12
无向图 测试结果..............................................................................................................13
有向图 测试结果..............................................................................................................13
3、广度遍历测试.....................................................................................................................14
测试用图...........................................................................................................................14
无向图邻接表...................................................................................................................14
1
个人结课作业,谢谢分享,请勿随意转载
测试结果...........................................................................................................................14
有向图邻接表...................................................................................................................15
测试结果...........................................................................................................................15
八、 多文件结构..............................................................................................................................16
1、说明.....................................................................................................................................16
2、实现多文件结构.................................................................................................................16
头文件...............................................................................................................................16
程序实现文件...................................................................................................................16
其他...................................................................................................................................16
附文件组织图片...............................................................................................................16
正文
一、 题目:
第 26 题:图的遍历的实现(限 1 人完成)
要求:
1)先任意创建一个图;
2)图的 DFS,BFS 的递归和非递归算法的实现
3)要求用有向图和无向图分别实现
4)要求用邻接矩阵、邻接表多种结构存储实现
二、 整体说明:
1、整体结构
1、分别采用邻接矩阵存储,邻接表存储,两种存储结构所使用的遍历子程序相
同;不同主要在图的创建,相邻顶点查找等方面。
2、对于有向图,无向图的区分,主要是在图的创建过程区别;
3、本程序中所用到的栈,是利用原有的队列结构改造实现,只是增加了一个获
得队尾元素函数 GetTail(SqQueue Q, QElemType *e),足以满足需要。
4、程序在具体实现时使用的是多文件结构,需要重新整理本实验报告程序代码,
才能具体运行(具体整理见多文件结构部分说明)。
2、图的创建
本程序主要目的在于实现图的遍历,出于调试方便等原因,只是简单的将
测试所用图的邻接矩阵输入创建函数。另外,在邻接表实现中,具体实现了图
的创建函数(详见第四部分)。
三、 遍历算法
Boolean visited[MAX]; //访问标志数组
2
个人结课作业,谢谢分享,请勿随意转载
1:深度优先遍历 DFS
算法思想
对于深度遍历的递归算法思想在此不再赘述。非递归算法主要思想如下:
利用栈结构的“先进先出思想”,在访问到某个顶点(如 v)时,该顶点 v 入栈;对
栈中顶点 v 的所有邻接点都已访问过(具体实现:NextAdjVex(Graph G, int v, int w)
函数返回-1),该顶点 v 出栈。
递归算法实现(C 代码)
void DFSTraverse(Graph G){
//对图 G 深度优先遍历
int v;
// VisitFunc = Visit;
for (v = 0; v < G.vexnum; v++) visited[v] = FALSE; //访问标志数组的初始化
for (v = 0; v < G.vexnum; v++)
if (!visited[v]) DFS(G, v); //对尚未访问的顶点调用 DFS
}//DFSTraverse
void DFS (Graph G, int v){
//从第 v 个顶点出发递归的深度优先遍历图 G
int w;
visited[v] = TRUE;
printf("%s ",G.vexs[v]);/* VisitFunc(v);*/ //访问第 v 个顶点
for (w = FirstAdjVex(G, v); w >= 0; w = NextAdjVex(G, v, w))
if (!visited[w]) DFS(G, w);
}//DFS
非递归算法实现(C 代码)
void DFSTraverse_F(Graph G){
//按深度优先非递归遍历
int v, w, u;
SqQueue Q;
for (v = 0; v < G.vexnum; ++v) visited[v] = FALSE;
InitQueue(&Q);
for (v = 0; v < G.vexnum; ++v)
if (!visited[v]){
visited[v] = TRUE;
EnQueue(&Q, v);
printf("%s ",G.vexs[v]);
while (QueueLength(Q)){
GetTail(Q,&u);
for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)){
if (!visited[w]){
visited[w] = TRUE;
EnQueue(&Q, w);
3
剩余17页未读,继续阅读
资源评论
- Helme2017-09-29源码在哪可以下载
fenxian2011
- 粉丝: 3
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功