SPFA 佇列優化的Bellman Ford演算法

2021-10-04 10:15:26 字數 1029 閱讀 7916

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...