数据结构——图的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) 邻接矩阵表示的图的递归深度优先遍历

相关文档
最新文档