文章目录
实验目的
掌握图的存储结构和定义
掌握图的创建方法和图的应用
掌握图的两种遍历方法和应用
掌握迪杰斯特拉算法和应用
理解最小生成树的概念
掌握普里姆算法和应用 使用 C++、定义图的数据结构,结合迭代开发思路实现“景区信息管理”专题编程。
主要仪器设备及耗材
1.安装了Windows 10操作系统的PC机1台
2.PC机系统上安装了Microsoft Visual Studio 2019开发环境
以下是本篇文章正文内容,下面案例可供参考
一、实验要求
开发景区信息管理系统,对景区的信息进行整理。使用图的数据结构来保存景区景点信息,为用户提供创建图,查询景点信息,旅游景点导航,搜索最短路径,铺设电路规划等功能。在确保书上例子正确的情况下,添加自己创建的图来检查自己实现的功能。
二、分析与设计
依据上述的实验目的与要求,可导出实现的图与景区信息管理系统的流程为:
(1)创建图:从Vex.txt和Edge.txt中分别读取景点信息和道路信息,根据读取的景区信息创建景区景点图。
(2)查询景点:根据输入的景点编号,查询该景点及相邻景点的信息。
(3)旅游景点导航:从起始景点开始,遍历景区所有景点,记录所有无重复的路径。
(4)搜索最短路径:搜索两个景点之间的所有路径,找到其中距离最短的路径。
(5)铺设电路规划:根据景区景点图,构造一棵最小生成树,设计出一套铺设线路最短,但能满足每个景点都能通电的方案。
1.数据结构的设计
代码如下(示例):
//定义Vex结构体,存储图的顶点
struct Vex
{
int num;//景区编号
char name[20];//景点名字
char desc[1024];//景点介绍
};
//定义Edge结构体,存储边的信息
struct Edge
{
int vex1;//边的第一个顶点
int vex2;//边的第二个顶点
int weight;//权值
};
//定义图的存储结构
struct Graph
{
int m_aAdjMatrix[20][20];//邻接矩阵
Vex m_Vexs[20];//顶点信息数组
int m_nVexNum;//当前图的顶点个数
};
//定义链表来保存所有路径
typedef struct Path {
int vexs[20];//保存一条路径
Path* next;//下一条路径
}*PathList;
2.核心算法设计
改进DFS算法
代码如下(示例):
void DFS(int nVex, bool bVisited[], int& nIndex, PathList& pList) {
bVisited[nVex] = true;//该顶点被遍历
pList->vexs[nIndex++] = nVex;//访问顶点编号为nVex的顶点
//判断所有的顶点是否都已经被访问过
int vexnum = 0;
for (int i = 0; i < m_Graph.m_nVexNum; i++)
//如果当前i节点被访问过,则vexNum自加
if (bVisited[i]) vexnum++;
//如果所有的顶点都已经被访问过,就保存这一条路径
if (vexnum == m_Graph.m_nVexNu