# maze-routing-algorithm-rust **Repository Path**: ricocosoul_admin/maze-routing-algorithm-rust ## Basic Information - **Project Name**: maze-routing-algorithm-rust - **Description**: 图论的应用,演示算法运行的过程 Rust实现 - **Primary Language**: Rust - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 迷宫寻路算法 (Rust)
**使用 Rust + egui 构建的迷宫生成与寻路可视化工具** ![Rust](https://img.shields.io/badge/Rust-2021-orange?logo=rust) ![egui](https://img.shields.io/badge/GUI-egui-blue) ![License](https://img.shields.io/badge/license-MIT-green)
--- ## ✨ 功能特性 - 🏗️ **Kruskal + 并查集** 生成完美迷宫(保证起点到终点有唯一解) - 🔍 四种经典寻路算法:DFS / BFS / DBFS / A* - 🎬 逐步可视化搜索过程,支持前进/后退 - ⚡ 可调节动画速度,批量步进提升效率 - 🖥️ 原生 GUI,无需浏览器或外部运行时 --- ## 🚀 快速开始 ### 环境要求 - Rust 1.70+(推荐通过 [rustup](https://rustup.rs/) 安装) ### 构建 & 运行 ```bash # 克隆或进入项目目录 cd maze-routing-algorithm-rust # 编译并运行(Release 模式) cargo run --release --bin maze-gui ``` --- ## 🎮 操作说明 ### 快捷键 | 按键 | 功能 | |------|------| | `Space` | 开始 / 暂停搜索 | | `R` | 重置地图(保留迷宫) | | `N` | 生成新迷宫 | | `←` / `→` | 单步后退 / 前进 | | `1` `2` `3` `4` | 切换算法:DFS / BFS / DBFS / A* | | `+` / `-` | 加速 / 减速动画 | | `Esc` | 退出 | ### 颜色图例 | 颜色 | 含义 | |------|------| | ⬛ 黑色 | 墙壁 | | ⬜ 白色 | 通道 | | 🟡 黄色 | 起点 / 终点 | | 🔵 天蓝 | 已访问 | | 🔴 浅红 | 回溯 | | 🟢 青绿 | 最终路径 | --- ## 📂 项目结构 ``` src/ ├── main.rs # GUI 入口 ├── lib.rs # 库导出 ├── config/ # 常量配置(地图尺寸、颜色等) ├── core/ │ ├── map.rs # 地图生成(Kruskal + 并查集) │ └── point.rs # 坐标 & 颜色定义 ├── alg/ │ ├── dfs.rs # 深度优先搜索 │ ├── bfs.rs # 广度优先搜索 │ ├── dbfs.rs # 双向 BFS │ └── astar.rs # A* 启发式搜索 ├── render/ # 纹理渲染 & 路径绘制 ├── ui/ # 控制面板 & 状态显示 └── input/ # 键盘快捷键处理 ``` --- ## 🧠 算法简介 | 算法 | 特点 | 最优路径 | 时间复杂度 | |------|------|:--------:|------------| | **DFS** | 深入优先,快速但路径可能较长 | ❌ | $O(V+E)$ | | **BFS** | 层级扩展,保证最短路径 | ✅ | $O(V+E)$ | | **DBFS** | 双向同时搜索,相遇即结束 | ✅ | $O(V+E)$ | | **A*** | 启发式 $f=g+h$,高效且最优 | ✅ | $O(E \log V)$ | > $V$:节点数,$E$:边数;A* 使用曼哈顿距离作为启发函数。 --- ## 🛠️ 迷宫生成 采用 **Kruskal 最小生成树 + 并查集(路径压缩 + 按秩合并)** 算法: 1. 将所有单元格初始化为墙 2. 奇数坐标 $(2k+1, 2j+1)$ 作为潜在通道 3. 随机打乱相邻单元格之间的墙 4. 逐墙判断:若两侧单元格不连通,则打通该墙并合并集合 5. 最终生成无环的完美迷宫 --- ## 🖼️ 界面布局 基于 `ui/mod.rs` 实现的三面板布局设计(egui 即时模式 GUI):
点击展开界面布局 ```mermaid graph TB A["🔍 迷宫寻路算法演示 v1.5.0
════════════════════════════════"] A --> B["三面板布局"] B --> L["左侧控制面板
ui/mod.rs::left_panel
━━━━━━━━━
🎯 选择算法
○ DFS ● BFS
○ DBFS ○ A*

🎮 操作
▶ 开始搜索
⏸ 暂停/继续
⏮ 上一步 ⏭ 下一步
🔄 重置 🎲 新地图

⏱ 播放参数
动画速度: ████░░ 10ms
每帧步数: ██░░░░░ 5
☑ 显示路径箭头"] B --> C["中央迷宫区域
render/mod.rs
━━━━━━━━━
实时迷宫渲染
⬛⬛⬛⬛⬛
⬛🟡🔵🔵⬛
⬛⬛🟢⬜⬛
⬛⬜⬜⬜🟡
⬛⬛⬛⬛⬛

🔀 路径箭头叠加"] B --> R["右侧信息面板
ui/mod.rs::right_panel
━━━━━━━━━
📊 统计信息
算法: BFS
状态: 运行中 ◉
自动播放: 是
步骤: 234/1000
找到路径: ✅
路径长度: 89
耗时: 45ms

🎨 颜色说明
■ 墙 □ 通道
■ 起点/终点(黄)
■ 已访问(蓝)
■ 回溯(红)
■ 最终路径(青)

⌨ 快捷键
空格: 开始/暂停
R: 重置 N: 新地图"] style A fill:#2a5cdb,stroke:#1e90ff,color:#fff,stroke-width:3px style L fill:#f5f5f5,stroke:#ddd,stroke-width:2px style C fill:#667eea,stroke:#764ba2,stroke-width:2px,color:#fff style R fill:#f5f5f5,stroke:#ddd,stroke-width:2px ```
**布局说明(源码映射):** | 区域 | 源码位置 | 尺寸 | 功能 | |------|---------|------|------| | **顶部标题栏** | `ui/mod.rs::top_bar()` | 全宽 | 显示程序标题、版本号 | | **左侧控制面板** | `ui/mod.rs::left_panel()` | 230px | 算法选择、操作按钮、播放参数 | | **中央迷宫区域** | `render/mod.rs::sync_texture()` | 自适应 | 迷宫纹理渲染、路径箭头叠加 | | **右侧信息面板** | `ui/mod.rs::right_panel()` | 230px | 统计信息、颜色说明、快捷键提示 | **交互控件详解:**
左侧控制面板(230px 宽)
  • 选择算法
    RadioButton 组,支持 DFS/BFS/DBFS/A* 四选一
  • 操作按钮
    开始搜索、暂停/继续、上一步、下一步、重置、新地图
  • 播放参数
    • 动画速度滑块 (Slider):1-100 ms/步
    • 每帧步数滑块:1-50 步/帧
    • 显示路径箭头复选框 (Checkbox)
右侧信息面板(230px 宽)
  • 统计信息
    实时显示当前算法、运行状态、步骤进度、路径长度、耗时
  • 颜色说明
    彩色方块 + 文字标签,对应 6 种网格状态
  • 快捷键提示
    快速参考表(空格、R、N、←/→)
--- ## ⚖️ 与 C++ Qt 版本对比 | 对比项 | C++ / Qt6 | Rust / egui | |--------|-----------|-------------| | **语言** | C++17 | Rust 2021 | | **GUI 框架** | Qt6 Widgets | egui (即时模式 GUI) | | **渲染方式** | QPainter 逐帧绘制 | GPU 纹理 + 即时模式 | | **线程模型** | QThread 多线程搜索 | 单线程预计算 + 批量步进 | | **内存管理** | 手动 new/delete | 所有权系统自动管理 | | **构建工具** | XMake / CMake | Cargo | | **依赖管理** | 手动或 vcpkg | crates.io 自动拉取 | | **跨平台支持** | 需分别配置工具链 | `cargo build` 原生支持 | | **可执行体积** | ~15 MB (含 Qt DLL) | ~3 MB (静态链接) | | **迷宫生成算法** | Prim 随机生成 | Kruskal + 并查集 | | **热键处理** | Qt 信号槽机制 | egui Input 事件轮询 | | **中文字体支持** | QString 原生 | 内嵌 TTF 字体文件 | ### 性能与优势对比 | Rust 版本优势 | C++ 版本优势 | |---------------|--------------| | ✅ 无运行时依赖,开箱即用 | ✅ 成熟的 Qt 生态、丰富文档 | | ✅ 内存安全,无数据竞争风险 | ✅ 多线程搜索更灵活可控 | | ✅ 编译即优化,性能接近 C++ | ✅ IDE 支持完善(Qt Creator) | | ✅ 增量编译快,开发效率高 | ✅ 更丰富的预设 UI 组件库 | | ✅ 跨平台最小化配置 | ✅ 企业级应用成熟度高 | --- ## 📜 许可证 MIT License