🚀 本项目是一个基于 Python + PyQt5 + NetworkX 开发的最短路径搜索算法可视化系统,支持交互式图构建和五种经典算法的动态演示,适用于课程设计、教学演示和算法理解。
- 支持 自定义图结构:添加节点、连接边、修改边权(包括负权)。
- 提供 图形界面操作:基于 PyQt5 实现直观交互,支持节点拖动、权重标注。
- 集成 五种搜索算法:
- 广度优先搜索(BFS)
- 深度优先搜索(DFS)
- Dijkstra 算法
- A* 启发式算法
- SPFA 算法(支持负权边)
- 实现 动态动画演示:搜索过程中节点变色,路径高亮,清晰展示每一步。
- 提供 图结构保存/加载 功能,支持
.json文件读写。
├── main.py # 主程序入口,包含图形界面与核心逻辑
├── Graph.json # 示例图结构(可加载)
├── README.md # 项目说明文档(本文件)- Python 3.8+
- PyQt5 >= 5.15
- NetworkX >= 2.8
安装依赖:
pip install -r requirements.txt
# 或手动安装
pip install pyqt5 networkxpython main.py # 启动图形界面
python main.py Graph.json # (可选)加载已有图结构- 添加节点:点击左上角“添加节点”按钮,在画布任意位置点击创建。
- 添加边:点击“添加边”按钮,依次点击起点和终点节点,会弹出对话框输入权重值(负数也支持)。
- 修改边权:点击“编辑边权”,点击已有边,即可重新输入权重。
- 删除边:点击“删除边”,点击目标边可删除。
- 节点拖动:直接鼠标拖动节点以调整布局(当前版本暂未自动更新路径估计)。
- 点击“设置起点/终点”按钮后,点击任意节点即可设为绿色(起点)或红色(终点)。
- 点击菜单栏中的算法(BFS、DFS、Dijkstra、A*、SPFA)进行选择。
- 点击“开始搜索”按钮开始执行,界面动态显示搜索过程。
⚠️ 当图中存在负权边时,系统会自动禁用不兼容的算法,仅允许使用 SPFA。
- “文件”菜单中可选择:
- 保存图结构:保存当前图到 JSON 文件;
- 加载图结构:加载已有
.json图文件,快速复现实验。
{
"nodes": {
"0": [100.0, 100.0],
"1": [200.0, 100.0]
},
"edges": [
["0", "1", 3.0]
],
"start_node": "0",
"end_node": "1"
}- 节点拖动后不会自动更新内部位置估值(A* 启发值仍用初始坐标计算)。
- DFS 和 A* 中的启发排序效果可能因权重分布不规律而不稳定;
- 不建议用于大型图或路径过长的演示(动画步骤可能过多)。
ZZP(本科课程设计项目)