实验十 图的存储结构与遍历
一、实验目的
1.掌握图的邻接矩阵表示方法;
2.理解基于邻接矩阵的深度优先、广度优先遍历方法的实现;
3.掌握图的邻接表表示方法;
4.理解基于邻接表的深度优先、广度优先遍历方法的实现。
二、实验环境
Windows 7以上版本的操作系统,Visual Studio 2019以上编程环境。
三、实验内容
1.画出以下无向图的邻接矩阵和邻接表,并对应邻接矩阵或邻接表列出该图的深度优先遍历序列和广度优先遍历序列。(选定A为起点进行遍历)
深度优先遍历序列:每次都是输出当前顶点的 下一步未访问的邻接点(一个点一个点输出)
广度优先遍历序列:每次都是输出当前顶点的 所有未访问的邻接点(一串一串输出)
邻接矩阵如下:
邻接表如下:
以A点为起点的深度遍历:A->C->B->G->D->E->F
以A点为起点的广度遍历:A->C->G->B->D->E->F
2.画出以下有向图的邻接矩阵和邻接表,并对应邻接矩阵或邻接表列出该图的深度优先遍历序列和广度优先遍历序列。(选定A为起点进行遍历)
邻接矩阵如下:
邻接表如下:
以A点为起点的深度遍历:A->C->B->G->D->E->F
以A点为起点的广度遍历:A->C->G->B->D->E->F
3.把练习1的无向图的邻接矩阵代入课件附带的 graph 项目中main.cpp文件的m[MAXV][MAXV] 二维数组,验证无向图深度优先遍历的结果。
4.把练习2的有向图的邻接矩阵代入课件附带的 graph 项目中main.cpp文件的m[MAXV][MAXV] 二维数组,验证有向图深度优先遍历的结果。
思考题:
1.请参考课本P261页的MatToList函数,把用户输入的邻接矩阵转化为邻接表。然后参考课本P265页的DFS函数,实现对使用邻接表存储的图的深度优先遍历。
2.请参考课本P266页的BFS函数,实现图的广度优先遍历。(可分别使用邻接矩阵或邻接表进行实现)。