文档详情

哈工大数据结构-图建立与遍历.doc

发布:2018-09-16约8.46千字共13页下载文档
文本预览下载声明
哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称: 数据结构与算法 课程类型:必修 实验项目名称: 图的建立与遍历 实验题目: 图的建立与遍历 设计成绩 报告成绩 指导老师 实验目的 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; //相邻的
显示全部
相似文档