图的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;