SP——最短路徑

Floyd算法

我們知道通過BFS或者DFS可以求出兩點之間的最短路徑荠锭,所以進行n^2次搜索,即對每兩個點都進行一次搜索,便可以求得任意兩點之間的最短路徑。
但懶人畢竟是懶人授段,有更快捷的代碼何樂而不為呢?
如果要讓任意兩點之間的路程變短番甩,只能引入第三個點(頂點k)侵贵,并通過這個頂點k中轉(zhuǎn)即i->k->j,才可能縮短原來從i點到j(luò)的路程缘薛。那么這個中轉(zhuǎn)的頂點k是1~n中的哪個點呢窍育?甚至有時候不只通過一個點,而是經(jīng)過兩個點或者更多點中轉(zhuǎn)會更短宴胧,即i->k1->k2->j或者i->k1->k2…->kn->j漱抓。
那么我們就有了DP方程:

dist[i][j]=min(dist[i][k]+dist[k][j])

通過這種方法我們可以只用O(V3)求出任意兩個點之間最短路徑。
正是因為它實現(xiàn)起來非常容易恕齐,如果時間復(fù)雜度要求不高乞娄,使用Floyd-Warshall來求指定兩點之間的最短路或者指定一個點到其余各個頂點的最短路徑也是可行的,適用于點數(shù)很少的圖。

//核心代碼
for(k=1;k<=n;k++)   
  for(i=1;i<=n;i++)   
     for(j=1;j<=n;j++)   
       if(e[i][j]>e[i][k]+e[k][j])   
         e[i][j]=e[i][k]+e[k][j];
/*Floyd-Warshall算法不能解決帶有“負權(quán)回路”(或者叫“負權(quán)環(huán)”)的圖,
因為帶有“負權(quán)回路”的圖沒有最短路补胚。
例如下面這個圖就不存在1號頂點到3號頂點的最短路徑码耐。
因為1->2->3->1->2->3->…->1->2->3這樣路徑中,
每繞一次1->-2>3這樣的環(huán)溶其,最短路就會減少1骚腥,永遠找不到最短路。
其實如果一個圖中帶有“負權(quán)回路”那么這個圖則沒有最短路瓶逃。*/

無權(quán)圖的最短路

BFS

源點設(shè)置成0束铭,和源點相連的設(shè)置成1,
以此類推厢绝,直到搜索結(jié)束所有點為止契沫;
BFS能很好地解決單源最短路徑的問題,
無權(quán)圖中昔汉,將權(quán)值視為單位長度即可懈万;
因為BFS本身是分層的,所以準確性是很有保障的
時間復(fù)雜度O(V+E)靶病,很常用的的算法

//核心代碼
這么簡單的算法会通,你還讓我貼代碼?

Dijkstra算法

時間復(fù)雜度O(V^2)娄周,類似Prim的想法涕侈,這么樸素的算法其實不怎么常用;

下面有能替代Dijkstra的國產(chǎn)算法SPFA煤辨;

請舉起火把裳涛,緊張地往下看!

SPFA

隊列優(yōu)化的Bellman—Ford算法
1.把源點的最短值當(dāng)做0众辨,入列
2.遍歷隊首頂點的初值端三,嘗試更新
3.如果某頂點的最短路徑值可能會改變,將其入列
4.重復(fù)操作
時間復(fù)雜度O(kE)泻轰,上限O(VE)
k一般是一個2左右的常數(shù)技肩,但是經(jīng)常有BT的出題人喜歡借此卡你

判斷負環(huán)

神奇的國產(chǎn)算法,記錄每個點入列的次數(shù)浮声,
當(dāng)其超過總點數(shù)V的時候虚婿,就證明存在負環(huán)
注意:雖然SPFA是替代Dijkstra的,但是泳挥,請千萬不要用Dijkstra判斷負環(huán)然痊!

堆優(yōu)化

SPFA中直接將隊列替換成單調(diào)隊列,每一次取出一個最短路徑估計值最小的頂點
當(dāng)圖中有負權(quán)邊的時候屉符,會瞬間變成指數(shù)級的時間復(fù)雜度··所以不要亂給SPFA優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剧浸,一起剝皮案震驚了整個濱河市锹引,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唆香,老刑警劉巖嫌变,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躬它,居然都是意外死亡腾啥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門冯吓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倘待,“玉大人,你說我怎么就攤上這事组贺⊥苟妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵失尖,是天一觀的道長啊奄。 經(jīng)常有香客問我,道長雹仿,這世上最難降的妖魔是什么增热? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮胧辽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘公黑。我一直安慰自己邑商,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布凡蚜。 她就那樣靜靜地躺著人断,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朝蜘。 梳的紋絲不亂的頭發(fā)上恶迈,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音谱醇,去河邊找鬼暇仲。 笑死,一個胖子當(dāng)著我的面吹牛副渴,可吹牛的內(nèi)容都是我干的奈附。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼煮剧,長吁一口氣:“原來是場噩夢啊……” “哼斥滤!你這毒婦竟也來了将鸵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤佑颇,失蹤者是張志新(化名)和其女友劉穎顶掉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑胸,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡一喘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗜暴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸克。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闷沥,靈堂內(nèi)的尸體忽然破棺而出萎战,到底是詐尸還是另有隱情,我是刑警寧澤舆逃,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布蚂维,位于F島的核電站,受9級特大地震影響路狮,放射性物質(zhì)發(fā)生泄漏虫啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一奄妨、第九天 我趴在偏房一處隱蔽的房頂上張望涂籽。 院中可真熱鬧,春花似錦砸抛、人聲如沸评雌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽景东。三九已至,卻和暖如春奔誓,著一層夾襖步出監(jiān)牢的瞬間斤吐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工厨喂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留和措,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓杯聚,卻偏偏與公主長得像臼婆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幌绍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1736年颁褂,瑞士數(shù)學(xué)家Euler(歐拉)在他的一篇論文中討論了格尼斯七橋問題故响,由此誕生了一個全新的數(shù)學(xué)分支——圖論...
    不困于情閱讀 4,377評論 0 9
  • 最短路徑算法在現(xiàn)實生活中也具有非常多的應(yīng)用,例如在一個復(fù)雜的景區(qū)颁独,想要從一個景點到另外一個景點彩届,利用最短路徑算法就...
    鄭明明閱讀 1,831評論 0 6
  • -DFS(Depth First Search):深度優(yōu)先搜索 訪問完一個頂點的所有鄰接點之后,會按原路返回誓酒,對應(yīng)...
    Spicy_Crayfish閱讀 2,825評論 1 0
  • 課程介紹 先修課:概率統(tǒng)計樟蠕,程序設(shè)計實習(xí),集合論與圖論 后續(xù)課:算法分析與設(shè)計靠柑,編譯原理寨辩,操作系統(tǒng),數(shù)據(jù)庫概論歼冰,人...
    ShellyWhen閱讀 2,255評論 0 3
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗靡狞。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33