预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

PAGE\*MERGEFORMAT10学生学号实验课成绩学生实验报告书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名学生姓名学生专业班级2017--2018学年第2学期实验课程名称:数据结构与算法综合实验实验项目名称图与景区信息管理系统实践报告成绩实验者专业班级组别同组者完成日期2018年5月23日第一部分:实验分析与设计(可加页)实验目的和要求目的掌握图的定义和图的存储结构。掌握图的创建方法和图的应用使用C++语言,定义图的数据结构,结合迭代开发思路实现“景区信息管理系统”。掌握图的两种遍历方法和应用。使用C++语言和深度优先算法实现“旅游景点导航”功能开发。掌握迪杰斯特拉算法和应用。使用C++语言和迪杰斯特拉算法实现“搜索最短路径”功能开发。理解最小生成树的概念,掌握普里姆算法和应用。使用C++语言和最小生成树算法实现“铺设电路规划”功能开发。2.要求开发景区信息管理系统,对景区的信息进行管理。使用图的数据结构来保存景区景点信息,为用户提供创建图、查询景点信息、旅游景点导航、搜索最短路径、铺设电路规划等功能。分析与设计(1)创建工程读取文件信息,创建图,输出周边景点信息读取景区信息文件,采用图的存储结构,创建景区景点图,查询景点信息。(2)迭代开发,进行深度优先搜索,实现旅游景点导航。(3)继续迭代,采用迪杰斯特拉算法、普里姆算法,实现搜索最短路径和电路铺设,开发景区信息管理系统。数据结构的设计记录顶点信息的结构体structVex{intnum;//景点编号charname[20];//景点名字chardesc[1024];//景点介绍};记录边的信息的结构体structEdge{intvex1;//边的第一个顶点intvex2;//边的第二个顶点intweight;//权值};用来保存路径的链表的结构体typedefstructPath{intvexs[20];//保存一条路径Path*next;}*PathList;CGraph类用来实现相应功能的方法classCGraph{private:intm_aAdjMatrix[20][20];//邻接矩阵Vexm_aVexs[20];//顶点信息数组intm_nVexNum;//当前图的顶点个数public:voidInit(void);boolInsertVex(VexsVex);boolInsertEdge(EdgesEdge);VexGetVex(intnVex);intGetVexnum(void);intFindEdge(intnVex,EdgeaEdge[]);voidDFS(intnVex,boolaVisited[],int&nIndex,PathList&pList);voidDFSTraverse(intnVex,PathList&pList);intFindShortPath(intnVexStart,intnVexEnd,EdgeaPath[]);voidFindMinTree(EdgeaPath[]);};2.核心算法设计(1)输出周边景点信息Input:操作表号与景点编号Output:输入景点的周边景点信息Process:intCGraph::FindEdge(intnVex,EdgeaEdge[]){intk=0;for(inti=0;i<m_nVexNum;i++){if(m_aAdjMatrix[nVex][i]!=0){aEdge[k].vex1=nVex;aEdge[k].vex2=i;aEdge[k].weight=m_aAdjMatrix[nVex][i];k++;}}returnk;//返回边的条数}(2)深度优先搜索算法实现旅游景点导航Input:操作表号与景点编号Output:从输入景点出发走遍整个景区的各种路线方案Process:voidCGraph::DFS(intnVex,boolaVisited[],int&nIndex,PathList&pList){aVisited[nVex]=true;//改为已访问pList->vexs[nIndex++]=nVex;//访问顶点//判断是否所有节点都已访问过intnVexNum=0;for(inti=0;i<m_nVexNum;i++){if(aVisited[i])nVexNum++;}//所有顶点都被访问过if(nVexNum==m_nVexNum){//新增链表节点,保存本次遍历的路径pList->next=(PathList)malloc(sizeof(Path));for(inti=0;i<m_nVexNum;i++){pList->next->vexs[i]=pList->vexs[i];}pLis