数据结构——图的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.实验题目
图的基本操作
2.实验目的
1)掌握图的邻接矩阵、邻接表的表示方法。
2)掌握建立图的邻接矩阵的算法。
3)掌握建立图的邻接表的算法。
4)加深对图的理解,逐步培养解决实际问题的编程能力
3.需求分析
(1)编写图基本操作函数。
①建立图的邻接表,邻接矩阵Create_Graph( LGraph lg. MGraph mg )
②邻接表表示的图的递归深度优先遍历LDFS( LGraph g, int i )
③邻接矩阵表示的图的递归深度优先遍历MDFS( MGraph g,int i, int vn )
④邻接表表示的图的广度优先遍历LBFS( LGraph g, int s, int n )
⑤邻接矩阵表示的图的广度优先遍历MBFS(MGraph g, int s, int n )
(2)调用上述函数实现下列操作。
①建立一个图的邻接矩阵和图的邻接表。
②采用递归深度优先遍历输出图的邻接矩阵
③采用递归深度优先遍历输出图的邻接表。
④采用图的广度优先调历输出图的邻接表。
⑤采用图的广度优先遍历输出图的邻接矩阵
4.概要设计
(1):
/**********************************图的基本操作**********************************/ //------------------------------- 邻接矩阵数据类型的定义--------------------------------
// 最大顶点个数
typedef struct
{
char vexs[MAX_VERTEX_NUM]; // 顶点向量
int acrs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum,arcnum; // 图当前顶点数和弧数}MGraph ;
//--------------------------------邻接表数据类型的定义----------------------------------
typedef struct ArcNode
{
福建师范大学物光院计算机教学辅导讲义
struct ArcNode *nextarc;
// 指向下一条弧的指针
}ArcNode;
typedef struct VNode { char data;
// 顶点信息
ArcNode *firstarc;
// 指向第一条依附该顶点的弧的指针
}VNode, AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices;
int vexnum,arcnum;
// 图当前顶点数和弧数
}LGraph;
(2) 本程序主要包含6个函数:
• 主函数 main()
• 建立图的邻接矩阵,邻接表
Create_Graph () • 邻接表表示的图的递归深度优先遍历 LDFS () • 邻接矩阵表示的图的递归深度优先遍历 MDFS () • 邻接表表示的图的广度优先遍历 LBFS () • 邻接矩阵表示的图的广度优先遍历
MBFS ()
各函数间调用关系如下:
(3) 主函数的伪码
main()
{ 定义邻接矩阵和邻接表;
建立邻接矩阵和邻接表; 邻接矩阵MDFS 深度优先遍历; 邻接矩阵MBFS 广度优先遍历 ; 邻接表LDFS 深度优先遍历; 邻接表LBFS 广度优先遍历
main
Create_Graph () LDFS () MDFS ()
LBFS () MBFS ()
5详细设计
/**********************************图的基本操作**********************************/ //------------------------------- 邻接矩阵数据类型的定义--------------------------------
// 最大顶点个数
typedef struct
{
char vexs[MAX_VERTEX_NUM]; // 顶点向量
int acrs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum,arcnum; // 图当前顶点数和弧数}MGraph ;
//--------------------------------邻接表数据类型的定义----------------------------------
typedef struct ArcNode
{
int adjvex; // 该弧所指向的顶点的位置
struct ArcNode *nextarc; // 指向下一条弧的指针
}ArcNode;
typedef struct VNode
{
char data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的弧的指针}VNode, AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices;
int vexnum,arcnum; // 图当前顶点数和弧数}LGraph;
int Create_Graph( MGraph *Mg , LGraph *Lg ) // 建立图的邻接矩阵,邻接表
{
输入图的顶点个数(字符),构造顶点向量
输入图的任意两个顶点的弧
构造邻接矩阵
构造邻接表
}
void LDFS(LGraph *Lg,int i) 邻接表表示的图的递归深度优先遍历
{
显示顶点向量,
指针指向下一个顶点向量
下一个顶点没有被访问,继续
否则退会上一个顶点向量的另一个边
}
void MDFS(MGraph *Mg,int i) 邻接矩阵表示的图的递归深度优先遍历