实验题目
图的邻接表创建和图的遍历
实验目的
- 掌握图的邻接矩阵、邻接表的存储方法;
- 掌握基于邻接表的图的基本运算的实现;
- 掌握图的深度优先遍历和广度优先遍历过程;
- 理解深度优先和广度优先遍历的算法。
实验内容
- 由给定的图的邻接矩阵建立图的邻接表并显示输出邻接表的表示;
- 给出从结点a开始的图的深度优先遍历序列;
- 给出从结点d开始的图的广度优先遍历序列。
实验要求
- 由图的邻接矩阵建立邻接表;
- 求图的深度优先遍历序列;
- 求图的广度优先遍历序列。
实验过程记录
1. 建立图的邻接表并显示
①新建项目,项目里新建文件“AdjGraph.h”。
在该文件里分别定义数据类型:图的边结点类型ArcNode、表头结点类型VNode和邻接表类型AdjGraph如下:
typedef char InfoType;
#define MAXV 10
#define INF 32767
ArcNode:
VNode:
AdjGraph:
②“AdjGraph.h”里,实现由邻接矩阵建立邻接表的创建图的运算算法CreateAdj。
③“AdjGraph.h”里,实现输出图的运算算法DispAdj。
④“main.cpp”里,定义给定图的顶点信息和邻接矩阵如下(补充邻接矩阵初始化):
#define N 5 //顶点个数
//定义顶点信息
char vex[N] = {'a','b','c','d','e'};
//*定义邻接矩阵(带权有向图)
int A[N][N] = {
};
⑤“main.cpp”里,定义图指针变量如下:
AdjGraph *G;
⑥“main.cpp”里,调用创建图、显示图运算如下:
CreateAdj(G,A,vex,5,7);
DispAdj(G);
printf("图顶点数和边数分别为:(%d,%d)",G->n,G->e);
2. 深度优先遍历
①“AdjGraph.h”里,实现深度优先遍历算法DFS。
②“main.cpp”里,调用算法如下:
//*深度优先遍历算法
printf("\n\n\n深度优先遍历:");
DFS(G,0);
③思考:如果从b点开始,将上面的“DFS(G,0);”改成“DFS(G,1);”,执行结果是否正确,为什么?应如何修改?
3. 广度优先遍历
①在项目里添加文件“LinkQueue.h”。
②“AdjGraph.h”里,#include “LinkQueue.h”。
③“AdjGraph.h”里,实现广度优先遍历算法BFS。
④“main.cpp”里,调用算法如下:
printf("\n\n\n广度优先遍历:");
BFS(G,0);
4. 测试结果
① 给出从结点a开始的图的深度优先遍历序列的运行截图。
②. 给出从结点d开始的图的广度优先遍历序列的运行截图。
实验总结(个人心得)