Update README.md

master
ps2zk5fnt 1 year ago
parent cc893ebf3c
commit fc6af43c0c

@ -95,31 +95,7 @@ struct Station {
struct Station stations[MAX_STATION_NUM]; // 站点数组 struct Station stations[MAX_STATION_NUM]; // 站点数组
在这个结构中,我们为每个站点记录了它的名称、编号和相邻节点链表的头节点指针。这样的话,我们就可以通过遍历这些链表来获取某一站点的所有邻居站点。同时,由于链表中的每个节点包含了相邻站点的编号和连接权重,因此我们也可以在搜索路径时方便地计算出经过某一条路径的总长度或换乘次数。 在这个结构中,我们为每个站点记录了它的名称、编号和相邻节点链表的头节点指针。这样的话,我们就可以通过遍历这些链表来获取某一站点的所有邻居站点。同时,由于链表中的每个节点包含了相邻站点的编号和连接权重,因此我们也可以在搜索路径时方便地计算出经过某一条路径的总长度或换乘次数。
示意图如下,表示了一个包含 4 个站点和 5 条连接边的地铁网络的邻接表结构:
stations[]:
index 0 1 2 3
+---------+---------+---------+---------+
| name | id | head | |
+---------+---------+---------+---------+
| "PARK" | 0 | +---|-----+ |
+---------+---------+---------+---------+
| "GATE" | 1 | +---|-----+ |
+---------+---------+---------+---------+
| "TOWER" | 2 | +---|-----|--+|
+---------+---------+---------+----|----+
| "HALL" | 3 | +---|-----+ |
+---------+---------+---------+---------+
adj_list[]:
station 0: PARK
head -> O |weight=5| -> 1 |weight=3| -> 2 |weight=1| -> null
station 1: GATE
head -> O |weight=3| -> 0 |weight=4| -> 3 |weight=2| -> 2 |weight=1| -> null
station 2: TOWER
head -> O |weight=1| -> 1 |weight=1| -> 3 |weight=3| -> null
station 3: HALL
head -> O |weight=2| -> 1 |weight=5| -> null
在这个示意图中stations 数组中的每个元素都包含了它所代表的站点的名称、编号和相邻节点链表的头节点指针。例如stations[0] 表示 "PARK" 站,它的编号为 0与相邻的站点是 "GATE"、"TOWER" 和 "HALL"。其中,与 "GATE" 站相连的边的权重为 5与 "TOWER" 相连的边的权重为 3与 "HALL" 相连的边的权重为 1。而对应的 adj_list 数组则记录了每个站点相邻节点链表的具体内容,其中每个节点包含了相邻站点的编号和连接权重。
2.3 算法设计 2.3 算法设计
我们选择Dijkstra算法作为路径计算模块的核心算法。Dijkstra算法是一种广泛应用于最短路径问题上的算法具有速度快、结果正确性高、易于实现等优势。它通过不断更新起点到每个点的最短距离并使用优先队列维护每个点的最短距离直到计算出终点的最短路径。 我们选择Dijkstra算法作为路径计算模块的核心算法。Dijkstra算法是一种广泛应用于最短路径问题上的算法具有速度快、结果正确性高、易于实现等优势。它通过不断更新起点到每个点的最短距离并使用优先队列维护每个点的最短距离直到计算出终点的最短路径。
Dijkstra算法 Dijkstra算法
@ -203,33 +179,27 @@ private:
#4. 系统测试 #4. 系统测试
系统测试思路和方法:
1输入1
根据设计方案,测试系统的功能是否完备,包括地铁线路查询、路径规划、站点信息查询等。 结果:输出了所有的站点及简略介绍
针对不同功能,设计测试用例,包括正常情况、边界情况、异常情况等。 2输入2
给出输入和预期结果,并记录运行结果和是否通过测试,以便后续分析和修改。 结果请问您要查询的地点编号是10
特殊情况: 编号10
地点:雍和宫
输入为空 介绍:位于北京市东城区北二环安定门东大街与雍和宫大街、和平里西街交汇处
输入为非法字符或格式 按任意键返回!
查询的线路、站点不存在 3输入3
查询的起点和终点在同一站点 结果请输入查询的地点3
查询的起点和终点不在同一线路上 到达地点 1的总距离为: 30 , 经过路径为:3
测试用例: 到达地点 2的总距离为: 60 , 经过路径为:3--->1--->2
到达地点 3的总距离为: 0 , 经过路径为:3
地铁线路查询: 输入:查询所有地铁线路  到达地点 4的总距离为: 100 , 经过路径为:3--->5--->4
预期结果:返回所有线路信息  到达地点 5的总距离为: 50 , 经过路径为:3--->5
运行结果:通过
路径规划 输入从A站到B站 (4)输入4
 预期结果返回从A站到B站的最短路径 结果请输入查询的地点3
 运行结果:通过 请输入目的地点5
站点信息查询 输入查询C站信息 总距离是: 50 , 经过路径为:3--->5
 预期结果返回C站的详细信息 
运行结果:通过
特殊情况: 输入为空、非法字符或格式、查询的线路、站点不存在、查询的起点和终点在同一站点、查询的起点和终点不在同一线路上
 预期结果:返回错误提示信息
 运行结果:通过
#5. 总结 #5. 总结
 我们设计的城市地铁导航系统旨在帮助用户方便快捷地查找和选择地铁线路及站点并提供实时更新的地铁运行状态和乘车提示。我们在创建项目时遇到的问题有为降低空间复杂度因而采用邻接表存储结构。Dijkstra的时间复杂度是On2效率并不高我通过查阅文献的方式了解到可以进一步采用优先队列的思路优化它在存储时就按照从小到大的顺序实现这样在选择节点时直接取队首距离最小的节点即可可以将时间复杂度优化到Ologn左右  我们设计的城市地铁导航系统旨在帮助用户方便快捷地查找和选择地铁线路及站点并提供实时更新的地铁运行状态和乘车提示。我们在创建项目时遇到的问题有为降低空间复杂度因而采用邻接表存储结构。Dijkstra的时间复杂度是On2效率并不高我通过查阅文献的方式了解到可以进一步采用优先队列的思路优化它在存储时就按照从小到大的顺序实现这样在选择节点时直接取队首距离最小的节点即可可以将时间复杂度优化到Ologn左右
Loading…
Cancel
Save