spfa演算法粗略理解

2021-10-02 02:21:09 字數 782 閱讀 6948

#spfa

最短路的一種重要演算法——spfa。

spfa是大名鼎鼎的bellman—ford的優化。

spfa的基本原理是通過中間點去鬆弛其他的點,再用上次鬆弛過的點去鬆弛其他點。最後到沒有任何乙個點可以被鬆弛的狀態,這時所有點到源點的距離就是該點到源點的最短路徑。

這裡我們使用鏈式前向星進行存邊。

const

int maxn=

1e5+5;

struct edgeedge[maxn<<1]

;int head[maxn]

,tot;

void

add_edge

(int u,

int v,

int w)

int n, m, s;

int dis[maxn]

;bool vis[maxn]

;void

spfa()

}}}}

intmain

(void

)spfa()

;for

(int i =

1;i <= n;i++

)printf

("%d%c"

,dis[i]

," \n"

[i==n]);

return0;

}

正確性

這個演算法的核心部分就是鬆弛的地方,我們之把被鬆弛成功的點放到佇列裡。

因為這個點被鬆弛成功,和它相連的點才可能被鬆弛成功。

對KMP演算法的粗略理解

假設現在有abcadabcdabcab這樣乙個字串 字元個數為n abcab這樣乙個模式串 字元個數為m 要求找到完全匹配時首字母的位置。第一眼看上去,我們想到了暴力求解的方法,從被匹配串的第乙個位置開始與模式串相比較,如果成功,則輸出首字母的位置,否則從第二個位置重新開始比較。依次進行下去,直到找...

Redis的Scan粗略理解

最近在了解redis的scan命令,scan就相當於分段遍歷,遍歷過程 現rehash也能保證scan不重複和不遺漏,這兩天了解這部分的原理,順便記錄一下。參考於redisscan迭代器遍歷操作原理 二 先說順序遍歷的問題,也就是按0,1,2,3 的順序,用例子說明,當遍歷完槽2的時候,返回下乙個遍...

Bellman Ford演算法,SPFA演算法

bellman ford 演算法能在更普遍的情況下 存在負權邊 解決單源點最短路徑問題。對於給定的帶權 有向或無向 圖g v,e 其源點為 s,加權函式w是 邊集e 的對映。對圖g執行 bellman ford 演算法的結果是乙個布林值,表明圖中是否存在著乙個從源點s 可達的負權迴路。若不存在這樣的...