演算法總結篇 最短路

2022-04-02 13:07:15 字數 647 閱讀 4093

目錄從娃娃就開始學起最短路,我竟然不會做!!

主要演算法就三種(我只會三種): \(floyd\),\(dijkstra\),和已經死了的

\(spfa\)

(其實 \(spfa\) 有許多優化方式都可以卡掉,會在下一章裡講,這裡就不贅述)

洛谷中有這麼一道題p6175 無向圖的最小環問題和例題差不多

發現 \(n\) 的範圍很小,考慮用 \(floyd\)。

因為 \(floyd\) 是按照結點的順序更新最短路的,所以我們在更新最短路之前先找到乙個連線點 \(k\),當前的點 \(k\) 肯定不存在於已存在的最短路 \(dis[i][j]\) 的路徑上,因為我們還沒用這個 \(k\) 去更新最短路,相當於 ($i \to k \to j \to $ j $到 \(i\) 的最短路 \to i$)這樣乙個環就找到了,接下來我們要記錄路徑,用 \(path[i][j]\) 表示在最短路i到j的路徑上j的前乙個結點,所以我們在更新最短路時也要更新這個點,原來的最短路是 \(i -> j\),現在變成了 \(i -> k -> j\),所以有 \(per[i][j] = pre[k][j]\),因為要找最小環,所以不斷更新找到環的權值,環更新一次,路徑也要更新一次,路徑更新時根據 \(pre\) 陣列迭代一下就 \(ok\) 了

code

最短路演算法總結

1.floyd演算法 n 3複雜度 基本思想 開始設集合s的初始狀態為空,然後依次將0,1,n 1定點加入,同時用d i j 儲存從i到j,僅經過s中的定點的最短路徑,在初始時刻,d i j a i j 中間不經過任何節點,然後依次向s中插入節點,並進行如下更新 d k i j min 還可以使用乙...

最短路演算法總結

藉著usaco 3.26搞了幾天最短路。不得不說usaco真是菜鳥學習演算法的利器啊,有資料可以查錯。題上是乙個800 800的稀疏圖,需要求全源最短路 先用floyd試了一下。畢竟就三行,很好寫。時間o n3 裸交第九個點果然tle了,不過看題解有人水過了 就把邏輯語言改了一下,無向圖時間又可以優...

最短路演算法總結

dijkstra演算法 dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。最常見的問題就是 給你一張地圖,讓你求出指定的點到其餘各定點的最短路徑。演算法核心 每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終的到源點到其餘所有點...