在网格地图上点击放置障碍,分别点击两次设定起点与终点。系统用Dijkstra 或 A*(曼哈顿启发式)实时计算最短路径,并依次高亮访问节点与最终路径。你可以反复调整地图,看不同障碍布局对最短路径的影响。
桌面/移动端均可 · 网格 14×14 · 完全可玩
把你的网格地图变成可玩的最短路径沙盘。看不同算法在不同障碍下的表现差异,理解 Dijkstra 与 A 星在启发函数上的本质区别。
对图算法好奇的初学者;讲台前需要可视化展示算法的老师;想感受算法直观性的非 CS 背景读者。
A 星通常比 Dijkstra 更快找到路径,因为它用了曼哈顿距离作为启发函数。但只有当启发式可采纳时它才保证最短路径。
单机算法教学工具;不支持加权节点(所有边权重相同);不适合做复杂网络分析。
最短路径的两个经典算法,绝大多数人都听过名字,但「A* 比 Dijkstra 快」这句话究竟快在哪里、什么时候不成立,靠读定义很难有体感。这个工具给你一块可以随意画墙的网格,让两种算法在同一张地图上跑一遍,用访问节点数、路径长度和单步展开的顺序,把差别直接摆在眼前。
网格中的每个格子是一个节点,上下左右四个方向相邻的格子之间有一条权值为 1 的边。你在地图上画出的墙会封住相应的连接;点两次格子可以分别指定起点与终点;选定算法后点「运行寻路」,工具会逐节点高亮搜索过程,最后把最短路径整条点亮。
本工具使用的启发式是曼哈顿距离,即只累加横向与纵向的格数差,不计对角。在四邻接、边权全为 1 的网格上,曼哈顿距离永远不会超过真实最短距离,这个性质叫「可采纳」,它保证 A* 找到的仍然是最短路径。这条性质有前提:一旦允许斜向移动且斜向边权仍为 1,或者边权不再统一,可采纳性就可能被破坏,A* 的结果就不再保证最优。
报告区给出三个量:路径长度是找到的最短路径经过的格子数,两个算法在可采纳启发式下应当一致;访问节点数是搜索过程中被取出并扩展的节点总数,这是两种算法差别最直观的体现;用时是浏览器实际跑完这一遍所花的时间。
读的时候有一个关键点必须先说清楚:这里的「用时」是端到端的墙钟时间,里面包含了逐步高亮的渲染开销,它随着你设置的步速一起变化。步速调到 50 毫秒一步时,即使算法本身很快,用时也会被拉长。所以比较两个算法时,应该看「访问节点数」和「路径长度」,把用时只当作参考量。
最值得做的对照实验是:固定同一张地图,先跑 Dijkstra 记下访问节点数,再清掉高亮、切换到 A* 重跑。障碍越稀疏,A* 相对省下的节点越多;障碍越密、绕行越远,两者差距会收窄。当启发式几乎不起作用时——比如终点被一大圈墙围住、实际路径要绕行很远——A* 的优势就会明显缩小。
用单步模式跑 A*,观察高亮出现的形状。纯 Dijkstra 会把目标周围一圈一圈地同心圆式铺开,铺满一个近似圆形区域后才碰到终点;A* 会出现一个明显偏向终点的扇形或楔形区域,先探出一条朝向终点的走廊。差别最悬殊的布局是「终点方向通畅但四周是墙」——此时 Dijkstra 要把整个环形墙都扩一圈才绕过去,而 A* 直接沿着缝隙钻出去。想讲清这个概念给初学者时,单步演示比任何文字描述都有效。
因为启发式只是「猜测」,猜得好就能少走弯路,猜得离谱就会误导。A* 之所以还能输出最短路径,条件是启发式不高估真实剩余距离,也就是可采纳性。当前设置下每个格子移动一格、代价为 1,曼哈顿距离只算横竖方向,因此永远小于等于真实最短距离,A* 得到的仍然是最短路径。代价是当启发式高估时,A* 会更快但可能给出次优路径——这也正是它被用在游戏寻路里的原因:游戏里通常宁可接受次优路径,也要换取速度。
意味着起点与终点之间不存在任何由空格组成的通路,通常是终点被一圈墙完全围住,或者起点本身被封死。这是图论里的可达性问题,和算法优劣无关:Dijkstra 与 A* 都会在同一张图上得到同样的结论。想要通行的结果,把墙打通即可。可达的情况下,两种算法的路径长度必然相同,这个不变量本身就是很好的自检点——如果你在同一张图上看到两种算法给出了不同长度的路径,那一定是操作或设置出了问题。
不能。它是一个网格上的教学沙盘:节点是规则的格子,边只有四邻接且权值固定为 1,没有加权路段、没有地形高差、没有动态障碍、没有多目标、没有时间窗。它适合用来建立「搜索算法如何在图上工作」的直觉,也适合作为课堂演示。如果你的目标是分析真实道路网络、交通拥堵或供应链路径,需要的是带权图上的算法与真实数据,两者之间的差距比这个工具与纸面公式之间的差距大得多。
首先,它是一个单机、单用户、纯前端的可视化工具,不做复杂网络分析、不做多源最短路、不做网络流或匹配类问题。其次,网格是固定的四邻接单位代价图,无法表达加权节点。第三,算法本身的耗时在这个工具里被可视化节奏淹没,因此「用时」这一项只适合看趋势,不适合做算法性能基准。工具的教学价值集中在「扩展顺序」这一条线上,而不是毫秒数。
适用范围:想直观理解 Dijkstra 与 A* 的差别;需要在课堂上或自学中演示最短路径的执行过程;想验证「启发式可采纳时才保证最优」这一结论;想找一个零安装、可反复修改地图的寻路玩具。它不适合作为算法性能评测平台,也不适合用来推断任何与个人能力相关的结论。
结果仅供自我探索与练习,不构成医疗或专业诊断。如果结果让你担心,请联系正规机构的专业人员。