#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 可達的負權迴路。若不存在這樣的...