在校园中找到从一点到另一点的最短路径对于许多学生和访客来说是一个常见的需求。本文介绍了一个使用C++编写的简易校园导览系统,该系统能够提供地点信息、查询最短路径,并允许管理员对地点和路径信息进行管理。
系统概述
该系统的核心功能包括:
- 显示所有地点:展示校园内所有可导航的地点及其描述。
- 查询最短路径:使用Dijkstra算法计算并显示两地点之间的最短路径。
- 地点管理:允许管理员添加、删除或修改地点信息。
- 路径管理:允许管理员添加、删除或修改路径信息。
关键数据结构
系统使用了几个关键的数据结构:
- 地点(Place):包含地点的ID、名称和描述。
- 边(Edge):表示两个地点之间的路径,包含起始地点、目的地点和路径长度。
- 节点(Node):用于Dijkstra算法中,包含地点名称、到该点的当前最短距离和前一个节点的名称。
功能实现
1. 地点和路径的存储
系统通过读取data.txt
和map.txt
文件来加载地点和路径信息。这些信息分别存储在vertices
和edges
映射中,其中vertices
映射将地点ID映射到地点信息,edges
映射将地点名称映射到一系列边。
2. 最短路径查询
使用Dijkstra算法来寻找最短路径。该算法从起始点开始,逐步扩展到达其他所有点的最短路径。算法使用优先队列来保持未访问节点的顺序,以确保每次都处理当前距离最短的节点。
3. 地点和路径的管理
系统提供了一系列函数来管理地点和路径,包括添加、删除和修改地点(addPlace
、deletePlace
、modifyPlace
)和路径(addEdge
、deleteEdge
、modifyEdge
)。修改操作后,可以通过调用savePlacesToFile
和saveEdgesToFile
函数将更新后的信息保存回文件。
管理员和用户界面
系统通过在主函数中调用chooseRole
函数来区分管理员和普通用户。管理员有权访问地点和路径管理功能,而普通用户只能查询地点和最短路径。系统通过简单的文本菜单来提供交互界面。
安全性考虑
为了简化,系统中的管理员密码直接硬编码在chooseRole
函数中。在实际应用中,这种做法可能存在安全风险,应使用更安全的认证机制。
结论
该简易校园导览系统展示了如何在C++中实现地点管理、路径查询和数据持久化的基本功能。通过优化和扩展,该系统可以成为校园导航和信息服务的有力工具。
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <queue>
#include <climits>
#include <stack>
using namespace std;
// 地点结构体,包含地点的ID、名称和描述
struct Place {
int id;
string name;
string description;
};
// 边的结构体,包含起始地点、目的地点和路径长度
struct Edge {
string from;
string to;
int weight;
};
// 节点结构体,用于Dijkstra算法
struct Node {
string name;
int dist;
string prev;
bool operator<(const Node& other) const {
return dist > other.dist;
}
};
map<int, Place> vertices; // 保存所有地点的映射
map<string, vector<Edge>> edges; // 保存所有边的映射
// 从data.txt文件中加载所有地点
void loadPlaces() {
ifstream file("data.txt");
if(!file) {
cout << "无法打开文件!&