spfa(shortest path faster algorithm)
演算法思想基於bellman-ford演算法
進行優化的方式是 在進行某一次鬆弛操作中 如果起點到乙個點的距離不變 那麼以這個點為中轉點能到達的點距起點的距離不變
如果這個點的距離發生了變化 就將這個點入佇列 以求通過這個點中轉的點距起點的位置是否發生了變化
vis陣列標記當前位於佇列中的頂點
顯然 乙個頂點出佇列時 要取消標記
#include
#define inf 0x3f3f3f3f
#define mod 1000000007
#define ios ios::sync_with_stdio(false)
#define endl '\n'
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int>p;
const
int maxn =
205;
int n, m;
int d[maxn]
, vis[maxn]
;vectorvec[maxn]
;void
init()
intmain()
int s, t;cin >> s >> t;
queue<
int>q;
d[s]=0
; q.
push
(s);
vis[s]=1
;while
(!q.
empty()
)}}}
if(d[t]
== inf)
printf
("-1\n");
else
printf
("%d\n"
, d[t]);
}}
spfa 快速最短路 佇列優化
spfa 快速最短路 佇列優化,可以用 hdu2544 驗證演算法的正確性 裡面的spfa演算法摘自acdart 的板子。把這個函式記錄在網上,以免忘記。我再理解下。spfa就是維護乙個佇列,這個佇列中的點可以進行鬆弛操作。2017 8 25再次修改 define crt secure no war...
Spfa優化小結
spfa是bellman ford的優化。但是spfa還有優化餘地 一 空間優化,用迴圈佇列 要點 1 判斷隊列為空 只能用if f r if f2 取餘操作 只要加到f r操作的 所有地方就行了 二 簡單而有效的優化slf 如果隊首元素較大,則將新元素插到隊首,否則插到隊尾 slf優化 341.c...
SPFA優化總結
spfa乙個很快很短適合稀疏圖的單元最短路的演算法。但是有時用優化,在稠密圖中跑的很快。優化1 slf 如果當前要入隊乙個點i,如果d i d head 比隊首要優 就放入隊首,否則就放入隊尾。這個本來要用乙個雙端佇列來實現的,但是要乙個超級好實現的方法,但是比較水,但是實測很快,加進來乙個tail...