Files
2026-06-26 19:58:32 +08:00

3.0 KiB
Raw Permalink Blame History

TODO List — 组员C

负责模块: 线路网络图 + 订单哈希查找与统计
核心数据结构: 图 StationGraph(邻接表)、哈希表 HashNode(链地址法)
文件: src/graph.hsrc/graph.cppsrc/hash.hsrc/hash.cpp
分支: feature/graph


一、图基础操作(邻接表)

  • InitGraph — 初始化图(vertexCount = 0firstEdge = nullptr
  • AddVertex — 添加站点顶点(检查重复 / 越界)
  • AddEdge — 添加线路边(无向图,需同时添加两条边)
  • FindVertex — 按 stationId 查找顶点下标

二、图遍历算法

  • DFS — 深度优先遍历(递归实现)
    • startIdx 出发,标记已访问,输出能到达的所有站点
  • BFS — 广度优先遍历(队列辅助)
    • 输出最少换乘次数的路径

三、最短路径算法(核心加分项)

  • Dijkstra — Dijkstra 最短路径算法
    • 初始化 dist[] = INFvisited[] = falsedist[src] = 0
    • 循环选最小未访问顶点,遍历邻接表松弛
  • PrintPath — 递归回溯 path[] 数组打印路径
  • RecommendTransfer — 换乘推荐入口
    • 输入起点/终点站名 → 调用 Dijkstra → 输出换乘方案
    • 方案包含:经过站点、换乘次数、总时长/总票价

四、最小生成树(可选加分)

  • PrimMST — Prim 算法,以最小总里程连通所有站点

五、站点文件读写

  • loadStationsFromFile — 从 data/stations.csv 读取站点和边数据
    • 解析顶点行和邻接边(格式: 相邻站点(车次号:边权);...
    • 调用 AddVertex / AddEdge 构建图

六、哈希表操作(链地址法)

  • Hash — 哈希函数(身份证号字符累加 % HASH_SIZE
  • InitHashTable — 初始化所有桶为 nullptr
  • HashInsert — 插入订单(头插法)
  • HashSearch — 按身份证号查找订单
  • HashSearchByOrderId — 按订单号查找(遍历所有桶)
  • HashDelete — 从哈希表中删除订单
  • DestroyHashTable — 释放所有链表节点内存

七、统计功能

  • CountSalesByTrain — 统计某车次已支付订单数
  • CountTrafficByRoute — 统计某线路(始发站-终点站)客流量
  • CountRevenueByPeriod — 统计某时间段总收入
  • HotTrainRanking — 热门车次排行(按销量降序,取前 N)

八、乘客交互接口

  • passengerFindTransfer — 换乘查询菜单交互
    • 输入起点站名和终点站名 → 调用 RecommendTransfer

依赖关系: graph.cpp#include <queue>BFS 辅助队列),hash.cpp#include "train.h"(统计关联车次表)
算法重点: Dijkstra 是最大加分项,务必写清注释便于答辩
验收标准: 能正确构建线路图,DFS/BFS 遍历正确,Dijkstra 给出最优换乘方案,哈希查找快速定位,统计数据准确