📡 SPFA · 队列优化Bellman-Ford

▶ 📖 问题描述 & 算法原理

SPFA (Shortest Path Faster Algorithm):队列优化的Bellman-Ford算法,用于求解单源最短路径,允许负权边(无负环)。通过维护一个队列,只对发生松弛的节点进行处理,减少冗余松弛。

输入: 有向图(邻接表),源点 s。
输出: 最短距离数组 dist[],若存在负环则报告。

📌 算法流程

1. 初始化 dist[s]=0,其余为∞,队列 {s},标记 s 在队列中。

2. 当队列非空:

- 出队 u,取消标记。

- 对于 u 的每条出边 (u,v,w):

* 若 dist[v] > dist[u] + w,则更新 dist[v]。

* 若 v 不在队列中,则入队 v,标记。

3. 若某个节点入队次数超过 n-1,则存在负环。

队列的作用: 只有被更新过的节点才可能继续松弛其他节点,队列存储这些“待处理”的节点。

📊 图 & 距离 & 队列 (点击距离值可编辑)

队列: (空)
📝 当前步骤 0 / 0
点击「下一步」开始演示

📊 距离历史 (每步后)

⬜ 未变  |  🟦 已计算  |  🔵 当前松弛  |  🟡 刚更新  |  ✅ 最终
🎉 最短路径已求出! —