一、系统概述
1.开发环境:windows 10,Clion2022
2.开发语言:C++
3.设计内容:设计学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所最短路径,以及从任意场所到达所有场所的最短路径。

图1-1 学校平面图设计
(1)地点设置介绍:如图1-1所示,设计图共计16个场所,并进行了编号(从0开始);
(2)顶点间的距离值:各顶点间距离值如图1-1所示,单位为米。
4.用户需求:

图1-2 菜单
图1-2展示了本程序初步设计的菜单,通过命令行实现用户交互,基本功能如下:
a)显示校园平面图:打印校园平面图;
b)两地点间最短路径:由用户输入起点、终点,并输出最短距离值与最短路径;
c)校园导航:由用户选择当前位置,输出“从当前位置开始,到达所有场所,最终返回当前位置”的最短距离、路径;
d)留下评论:读取用户输入评论,写入文件;
e)查看评论:从文件中读取评论并打印。
5.设计思想:
a)图的存储:将校园地图通过邻接矩阵进行存储;
b)两地点间最短路径:在初始化时,通过Dijkstra算法计算出任意两点间的最短距离、路径,用户使用该功能时只需查表并输出即可;
c)校园导航:本质是非完全图,允许重复访问的旅行商问题。通常的旅行商问题是NPC问题,并且要求完全图,非完全图的求解较难。本次系统设计通过将非完全图转化为完全图,然后使用状态压缩动态规划解决旅行商问题,达到本功能的近似求解。经过学习了解,此种方法不一定能得到最优解,但本人在网上尚未找到权威资料以解决本问题。
二、系统总体设计
2.1用户交互设计

图2-1 用户交互
图2-1为用户交互流程图,其设计了一个简单循环,循环中获取用户输入、解析并执行,执行操作后进行下一次循环(或退出程序)。
2.2图操作模块设计
图操作模块主要针对“两地点间最短路径”、“校园导航”两大功能进行设计。
由于程序功能