PathLab 将算法核心与 Windows 桌面界面分离,保证核心逻辑可独立测试。
Win32/GDI 桌面界面
├─ 地图画布与地形工具
├─ 搜索动画与指标面板
└─ 文件选择与交互事件
│
▼
pathfinding_core 静态库
├─ Grid:网格、地形、起终点与邻接关系
├─ Pathfinder:BFS、Dijkstra、A*
└─ MapIO:版本化 JSON 地图保存/加载
│
▼
自动化测试与样例地图
- BFS 以步数为优先级,不考虑地形权重,适合作为无权图基线。
- Dijkstra 使用进入目标格子的地形代价,保证非负权图上的最低代价路径。
- A* 使用曼哈顿距离作为启发函数。最小地形代价为 1,因此该启发函数可采纳,结果与 Dijkstra 的最优代价一致。
- 四方向移动,不允许对角穿越。
- 网格采用一维连续
std::vector<Terrain>,坐标通过y * width + x映射。 - BFS 使用
std::queue。 - Dijkstra 与 A* 使用
std::priority_queue。 - 前驱数组用于回溯最终路径,访问顺序单独保留供动画播放。
地图以带版本号的 JSON 文档保存。每个字符代表一种地形:
.:平地,代价 1F:森林,代价 3W:水域,代价 6#:障碍,不可通行
加载时会校验版本、尺寸、行数、行宽、地形代码以及起终点坐标。