哈工大数据结构-图建立与遍历.doc
文本预览下载声明
哈尔滨工业大学计算机科学与技术学院
实验报告
课程名称: 数据结构与算法
课程类型:必修
实验项目名称: 图的建立与遍历
实验题目: 图的建立与遍历
设计成绩 报告成绩 指导老师
实验目的
1.学会用邻接表、邻接矩阵构建有向图和无向图
2.加深对深度优先搜索和广度优先搜索的理解,并能够在邻接表和邻接矩阵上进行深度优先和广度优遍历。
二、实验要求及实验环境
(1)能够建立(有向和无向)图的邻接矩阵和邻接表存储结构
(2)能够在邻接矩阵和邻接表存储结构上对(有向和无向)图进行深度优先(递归和非递归都要求)和广度优先搜索
(3)能够存储和显示相应的搜索结果(深度优先或广度优先生成森林(或生成树)、深度优先或广度优先序列和编号)
(4)以文件形式输入图的顶点和边,并显示相应的结果。要求顶点不少于10个,边不少于13个
本程序在win7下codeblock上运行
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)
1.逻辑设计
定义图邻接矩阵的结构体:typedef struct{
char vertex[NumVertices]; //顶点向量
int edge[NumVertices][NumVertices]; //邻接矩阵
int n,e; //图当前的顶点数,边数
}MTGraph;
定义邻接表的结构体:typedef struct node{
int adjvex; //弧所指向的顶点位置
int cost; //权值
struct node* next; //指向下一条弧的指针
}EdgeNode;
typedef struct{
char vertex; //顶点信息
EdgeNode *firstedge; //指向第一条依附于该顶点的弧的指针
}VertexNode;
typedef struct{
VertexNode vexlist[NumVertices];
int n,e; //顶点数弧数
}AdjGraph;
2.物理设计
程序模块的调用:
四、测试结果
TXT截图
五、系统不足与经验体会
系统不足:无法实现以文件形式输入由邻接表构建的图。
没有实现递归形式的广度优先搜索。
图中的每个顶点元素只能保存一个字符信息,无法对顶点添加更多的信息。
经验体会:熟练地使用的邻接矩阵法对图进行构建。加深了对图搜索遍历操作的应用,进一步理解了几种搜索遍历。
写代码时,因为设置了很多的变量很多的符号,经常一时间不知道应该是用哪一个变量,只得慢慢看下去,所以后来在每设置一个变量时候都给他添加上备注,方便之后查找使用。
六、附录:源代码(带注释)
#includefstream
#includestack
#includequeue
#includestring.h
#includestdlib.h
using namespace std;
#define NumVertices 20
#define maxlength 20
typedef struct{
char vertex[NumVertices]; //顶点向量
int edge[NumVertices][NumVertices]; //邻接矩阵
int n,e; //图当前的顶点数,边数
}MTGraph;
//用邻接矩阵建立无向图
void CreateMGraph1(MTGraph *G)
{
int i,j,k,w;
for(i=0;iG-n;i++)
for(j=0;jG-n;j++)
G-edge[i][j]=0;
ifstream in(D:\\graph.txt);
if(!in)
coutfail to open the fileendl;
inG-nG-e; //顶点数和边数
for(i=0;iG-n;i++)
{
inG-vertex[i]; //顶点向量
}
for(i=0;iG-e;i++)
{
int k,j;
inkj; //相邻的
显示全部