图的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈尔滨工业大学计算机科学与技术学院

实验报告

课程名称:数据结构

课程类型:必修

实验项目名称:第三次实验

实验题目:图的基本操作

班级:10803102

学号:1080310225

姓名:陈虞付

一、实验目的

实现有向图、无向图的基本操作。

二、实验要求及实验环境

实验要求:实现有向图、无向图的基本操作(建立连接表,邻接矩阵,深度优先搜索,广度优先搜索等)。

实验环境:windows平台、code::blocks集成开发环境。

三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)

1.逻辑设计

主程序的流程:定义邻接表gl、bool型数组visited[]。程序开始时,先初始化邻接表,然后提示图是否有向,输入选择,调用MainMenue()函数到主菜单的选择界面,根据输入的选择调用相应的函数、实现相应的逻辑功能。

2.物理设计

程序功能:以文件方式方式输入的无/有向图,实现无/有向图的邻接表、邻接矩阵求解及对图的深度优先遍历、广度优先遍历操作。

输入:将要求解的无/有向图按规则输入对应的文件

输出:通过主菜单的选择,按需实现对图的各种操作,显示结果并保存到相应的文件中。

源程序说明:

头文件:graphics.h

函数实现:graphics.cpp

主函数:main.cpp

存放的文件说明:

无向图:graphics1.txt

存放格式为第一行存放图的顶点数n,边数b,下面每行存放两个相邻顶点:Vi,Vj 有向图:graphics2.txt

存放格式为第一行存放图的顶点数n,下面每行存放两个相邻顶点Vi-->Vj:Vi,Vj 无向图邻接表:adjlist1.txt

有向图邻接表:adjlist2.txt

无向图邻接矩阵:adjmatrix1.txt

有向图邻接矩阵:adjmatrix2.txt

所有抽象数据类型的定义如下:

//定义邻接表的边节点类型

struct EdgeNode

{

int adjvex;

EdgeNode *next;

};

//定义邻接表类型

typedef EdgeNode **ADJLIST;

各模块的具体实现程序是:Graphicscpp

各模块的的功能及参数说明:graphics.h 如下:

//对图操作的主菜单

void MainMenue();

//初始化邻接表

void InitialAdjList(ADJLIST &GL, int n);

//以文件方式输入图

//bool InputGraphics();

//建立图的邻接表

void CreatAdjList(ADJLIST &GL, int &n, int m);

//建立图的邻接矩阵

void CreatAdjMatrix(ADJLIST &GL, int &n, int m);

//从初始点出发深度优先搜索由邻接表GL表示的图

void DFSAdjList(ADJLIST GL, bool *&visited, int i, int n);

//从初始点出发广度优先搜索由邻接表GL表示的图

void BFSAdjList(ADJLIST GL, bool *&visited, int i, int n);

四、测试结果

1、图是否有向的选择、主菜单界面:

2、建立邻接表的测试结果:

3、建立邻接矩阵的测试结果:

4、广度优先搜索的测试结果:

5、深度优先搜索的测试结果:

6、退出界面:

五、系统不足与经验体会

系统不足:异常处理不够健壮,不能够用很形象的方式打印图的直观图。

经验体会:通过这次实验使我对图有了比较深入的了解,熟悉了图的基本操

作,同时也感受到了看似简单的程序实现,真正做起来很费劲,有很多的

困难需要去克服。

六、附录:源代码(带注释)

graphics.h 源代码如下:

#ifndef GRAPHICS_H

#define GRAPHICS_H

struct EdgeNode

{

int adjvex;

EdgeNode *next;

};//定义邻接表的边节点类型

//定义邻接表类型

typedef EdgeNode **ADJLIST;

//对图操作的主菜单

void MainMenue();

//初始化邻接表

void InitialAdjList(ADJLIST &GL, int n);

//以文件方式输入图

//bool InputGraphics();

//建立图的邻接表

void CreatAdjList(ADJLIST &GL, int &n, int m);

//建立图的邻接矩阵

void CreatAdjMatrix(ADJLIST &GL, int &n, int m);

//从初始点出发深度优先搜索由邻接表GL表示的图

void DFSAdjList(ADJLIST GL, bool *&visited, int i, int n);

//从初始点出发广度优先搜索由邻接表GL表示的图

void BFSAdjList(ADJLIST GL, bool *&visited, int i, int n);

#endif

Graphics.cpp 源代码如下:

#include

#include

#include

#include

#include "graphics.h"

#define MAX_SIZE 100

using namespace std;

相关文档
最新文档