亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

最短路算法選型指南:Dijkstra與Floyd原理、實現(xiàn)與工程實踐

最短路算法選型指南:Dijkstra與Floyd原理、實現(xiàn)與工程實踐 前陣子幫一個團隊看園區(qū)導(dǎo)覽的小項目剛開始圖上只有幾十個點位最短路這塊完全沒人當(dāng)一回事。等數(shù)據(jù)源里的監(jiān)控點位一接進來節(jié)點憑空多出六七倍原來那套直接全源預(yù)計算的方案開始卡頓這才有人跑來問我Dijkstra 和 Floyd 到底該怎么選。說實話這兩個名字在技術(shù)群里被問了無數(shù)次但真要在工程里給出一個讓自己滿意的答案遠不是背個模板那么簡單。這篇就以最短路算法里最容易碰到的這兩塊內(nèi)容為主線把原理、實現(xiàn)、選型、坑點串一遍。適合正在學(xué)圖論的初學(xué)者也適合準備算法面試或者正在寫路徑規(guī)劃 Demo 的開發(fā)者。1. 先搞清楚兩個算法各自適合什么場景1.1 給最短路問題劃定一個明確邊界在聊算法之前先把問題本身說清楚。給定一張有向圖圖里有節(jié)點和帶權(quán)邊權(quán)重表示從一個節(jié)點走到另一個節(jié)點的代價最短路問題就是找一條從起點到終點、邊權(quán)之和最小的路徑。工程里最常見的兩種變形是單源最短路也就是給定一個起點求它到所有其他點的最短距離另一種是全源最短路要求圖中任意兩點之間的最短距離和對應(yīng)路徑。這里有一個關(guān)鍵前提必須分清楚討論 Dijkstra 時默認所有邊權(quán)都是非負數(shù)因為這是 Dijkstra 貪心策略成立的核心條件。Floyd 則稍微寬松一些能處理沒有負環(huán)的負權(quán)邊。所謂負環(huán)就是圖中存在一個環(huán)繞一圈的總權(quán)重還是負數(shù)這種情況下最短路徑?jīng)]有下界任何算法都無法給出有限的答案。先約定記號n 表示節(jié)點數(shù)m 表示邊數(shù)。Dijkstra 的堆優(yōu)化復(fù)雜度通常寫成 O((nm)log n)Floyd 的復(fù)雜度則是穩(wěn)定的 O(n^3)。也就是說當(dāng) n 大到幾百幾千時Floyd 和 Dijkstra 的差距會呈現(xiàn)數(shù)量級的差別后面會專門用實例說明。1.2 Dijkstra 為什么快貪心鎖點的邏輯Dijkstra 的核心思路可以概括成一句話每次從未確定的點里挑一個當(dāng)前距離最小的點把它“鎖死”然后用它去更新相鄰點。為什么敢“鎖死”我們用一個生活化的比喻來解釋。假設(shè)你站在起點每個點的當(dāng)前距離就是“已知的到該點最短試探距離”。既然所有邊權(quán)非負那么從起點出發(fā)任何一條繞路到達當(dāng)前最小距離點 u 的路徑都必須先經(jīng)過某個距離不小于 u 的點繞路本身只會讓路徑更長。因此當(dāng)前距離最小的點 u不可能再通過其他點繞出一條更短的路徑它此刻的距離就是真正的最終答案。這就是貪心算法的典型特征局部最優(yōu)的選擇能導(dǎo)出全局最優(yōu)。Dijkstra 每次選擇當(dāng)前距離最小的未訪問點并永久標記它這個過程不斷重復(fù)直到所有可達點都被鎖定。樸素實現(xiàn)的尋找最小點需要 O(n) 掃描整個算法為 O(n^2)使用優(yōu)先隊列后尋找最小點的時間降為 O(log n)總復(fù)雜度變?yōu)?O((nm)log n)。后面的完整實現(xiàn)部分會給出代碼但先記住這個“鎖點”直覺調(diào)試時遇到問題會更容易定位。1.3 Floyd 為什么簡單三維 DP 的降維思維Floyd 的代碼量很少通常十幾行就能寫完但網(wǎng)上關(guān)于“k 為什么必須寫在外層”的問題層出不窮。理解了它的原理這些問題就不存在了。Floyd 本質(zhì)上是一個動態(tài)規(guī)劃過程。定義 f[k][i][j] 表示“只允許使用編號小于等于 k 的節(jié)點作為中間節(jié)點時i 到 j 的最短距離”。動態(tài)規(guī)劃轉(zhuǎn)移方程是f[k][i][j] min( f[k-1][i][j], f[k-1][i][k] f[k-1][k][j] )含義很直接從 i 到 j要么不經(jīng)過新加入的節(jié)點 k路徑還走原來的老路要么經(jīng)過 k那就從 i 先到 k再從 k 到 j。因為 k 的加入是逐步擴大的這個轉(zhuǎn)移天然保證了完整性。實際寫代碼時k 這一維可以滾動掉二維矩陣直接原地更新于是變成d[i][j] min(d[i][j], d[i][k] d[k][j])這也解釋了為什么 k 必須放在最外層。如果 k 放在內(nèi)層就相當(dāng)于在某一個 i、j 的循環(huán)體內(nèi)部同時使用不同“層級”的 k 值狀態(tài)的先后順序被打亂結(jié)果必然錯誤。Floyd 能處理負權(quán)邊是因為每一輪 k 的迭代都是一次全局修正負權(quán)邊帶來的影響會在后續(xù)輪次被矯正。但一旦存在負環(huán)每繞一圈距離更小最短路就沒有了有限答案。1.4 一張表做出工程選型實際項目里很少有人會把所有最短路算法都實現(xiàn)一遍通常是先根據(jù)場景篩選。我把常見場景整理成下面這張表場景邊權(quán)條件推薦算法復(fù)雜度單源最短路非負權(quán)Dijkstra 堆優(yōu)化O((nm)log n)單源最短路存在負權(quán)但無負環(huán)Bellman-Ford 或 SPFAO(nm)SPFA 平均更好全源最短路n 較小幾百以內(nèi)FloydO(n^3)全源最短路n 較大、圖稀疏跑 n 次 DijkstraO(n(nm)log n)全源最短路存在負權(quán)Johnson 算法O(nm n(nm)log n)看到這張表很多讀者會問全源最短路為什么不用 Floyd 一把梭答案是當(dāng) n 超過 500 或 1000 時n^3 的增長非??鋸?。假設(shè) n1000Floyd 要做十億次級別的松弛操作而如果圖稀疏、m 只有幾千跑 n 次堆優(yōu)化的 Dijkstra 只要幾百萬次操作差距是兩個數(shù)量級以上。反過來如果 n 很小比如幾十Floyd 寫起來最省事還天然記錄了所有點對距離工程上非常舒服。2. 手寫 Dijkstra從樸素到堆優(yōu)化每一步都不白走2.1 數(shù)據(jù)結(jié)構(gòu)先定好鄰接表怎么選Dijkstra 的實現(xiàn)細節(jié)里圖的存儲方式是第一步。鄰接矩陣的優(yōu)點是隨機訪問任意兩點的邊權(quán)是 O(1)但空間是 O(n^2)。n 一旦到 10 萬鄰接矩陣直接爆內(nèi)存就算 n 只有幾千在很多內(nèi)存受限的場景也不劃算。鄰接表只存實際存在的邊空間 O(nm)對堆優(yōu)化版本來說更重要我們每次從堆頂彈出節(jié)點 u需要快速遍歷 u 的所有出邊鄰接表天然支持這種操作。工程上我習(xí)慣用數(shù)組 結(jié)構(gòu)體的方式或者直接用 vector 存邊python 場景則用 list of dict。C 里常用這樣一段struct Edge { int to; int w; }; vectorEdge graph[MAXN];存無向圖的時候每條邊要加入兩次有向圖只需要一次。輸入數(shù)據(jù)如果可能給出重邊要保留最小的那條因為多條同向邊疊加后只有權(quán)重最小的對最短路有貢獻。2.2 樸素 Dijkstra 完整實現(xiàn)先給出樸素的 O(n^2) 版本。它代碼簡單、不容易寫錯在稠密圖里甚至常常比堆優(yōu)化更快因為稠密圖里堆的 log n 常數(shù)也不容忽視。const int MAXN 1005; const int INF 0x3f3f3f3f; int dist[MAXN]; bool used[MAXN]; vectorEdge graph[MAXN]; void dijkstra_naive(int s, int n) { fill(dist, dist n 1, INF); memset(used, 0, sizeof(used)); dist[s] 0; for (int i 1; i n; i) { int u -1; int best INF; // 找當(dāng)前距離最小的未訪問點 for (int v 1; v n; v) { if (!used[v] dist[v] best) { best dist[v]; u v; } } if (u -1) break; // 剩下的點都不可達 used[u] true; // 用 u 松弛鄰居 for (auto e : graph[u]) { if (dist[e.to] dist[u] e.w) { dist[e.to] dist[u] e.w; } } } }這里的 used 數(shù)組就是前文說的“鎖點”。每次找最小點時掃描全部節(jié)點所以復(fù)雜度是 O(n^2)。注意初始化時 i 從 1 到 n節(jié)點編號按 1 開始如果節(jié)點從 0 開始相應(yīng)地改成 0 到 n-1。提示如果圖是稠密圖n 只有幾百幾千且 m 接近 n^2樸素版往往比堆優(yōu)化版還快。因為堆優(yōu)化的常數(shù)開銷在這種規(guī)模下可能超過 O(n^2) 的掃描成本。很多算法模板只教堆優(yōu)化容易讓人誤以為樸素版沒意義其實它非常適合稠密小圖。2.3 優(yōu)先隊列優(yōu)化版本當(dāng) n 在 10 萬級別、圖又稀疏的時候樸素版每一次掃描都是災(zāi)難必須用堆來維護當(dāng)前距離最小的點。C 的 priority_queue 默認是大頂堆所以要用 pair 或者自定義比較器。常見寫法是把距離的相反數(shù)放進去或者用 greater 指定小頂堆。下面是完整模板const int MAXN 100005; const int INF 0x3f3f3f3f; vectorEdge graph[MAXN]; int dist[MAXN]; bool vis[MAXN]; void dijkstra_heap(int s, int n) { fill(dist, dist n 1, INF); memset(vis, 0, sizeof(vis)); dist[s] 0; priority_queuepairint, int, vectorpairint, int, greaterpairint, int pq; pq.push({0, s}); while (!pq.empty()) { auto [d, u] pq.top(); pq.pop(); // 跳過已經(jīng)確定最短路的點 if (vis[u]) continue; vis[u] true; // 如果不用 vis也可以用 if (d ! dist[u]) continue; for (auto e : graph[u]) { if (dist[e.to] dist[u] e.w) { dist[e.to] dist[u] e.w; pq.push({dist[e.to], e.to}); } } } }先解釋 pair 的排序邏輯。priority_queue 默認按 pair 的第一個元素排序first 是距離所以堆頂總是距離最小的那個。greater 只是把默認的大頂堆翻轉(zhuǎn)成小頂堆。節(jié)點一旦被更新我們就把新的距離和節(jié)點編號再次 push 進堆因此堆里可能存在同一個節(jié)點的多個舊條目。每次彈出時通過 vis 判斷這個節(jié)點是否已經(jīng)確定了最終最短路是則跳過。這個“跳過舊條目”是關(guān)鍵細節(jié)下面專門展開。為什么 vis[u] continue 不會導(dǎo)致漏更新因為當(dāng) u 第一次以當(dāng)前最短距離從堆頂彈出時貪心性質(zhì)保證它已經(jīng)不可能再被其他點更新后續(xù)所有相同節(jié)點的條目都是冗余的。所以先彈出先鎖定后面重復(fù)彈出直接忽略。如果寫成 if (d ! dist[u]) continue效果一樣因為 d 不是最新距離說明這條記錄已經(jīng)過期。從復(fù)雜度角度看每條邊最多觸發(fā)一次成功的松弛每次成功松弛都會向堆里 push 一次堆至多 O(m) 條記錄每次 pop 是 O(log m)總復(fù)雜度 O((nm)log n)。2.4 順手把最短路徑也打出來實際項目中不能只返回距離很多場景需要路徑本身。Dijkstra 記錄路徑的思路很簡單更新 dist[e.to] 時把 prev[e.to] 設(shè)置為 u。最終從終點反向追溯 prev 就能得到路徑。打印時用一個?;蛘哌f歸逆序輸出。示例代碼如下int prev_node[MAXN]; void dijkstra_with_path(int s, int n) { // dist, vis 初始化同上 memset(prev_node, 0, sizeof(prev_node)); while (!pq.empty()) { auto [d, u] pq.top(); pq.pop(); if (vis[u]) continue; vis[u] true; for (auto e : graph[u]) { if (dist[e.to] dist[u] e.w) { dist[e.to] dist[u] e.w; prev_node[e.to] u; pq.push({dist[e.to], e.to}); } } } } void print_path(int s, int t) { if (dist[t] INF) { cout 不可達 endl; return; } vectorint path; for (int v t; v ! 0; v prev_node[v]) { path.push_back(v); } reverse(path.begin(), path.end()); for (int i 0; i path.size(); i) { if (i) cout - ; cout path[i]; } cout endl; }注意 prev 數(shù)組初始化為 0表示沒有前驅(qū)。起點 s 的 prev 保持 0所以回溯到 0 時停止。這個方法對路徑記錄要求不高的小圖完全夠用。3. Floyd 十行代碼背后的幾個坑3.1 k 必須在外層很多人栽在這里Floyd 的代碼極簡單寫錯了也不容易一眼發(fā)現(xiàn)因為它們不會直接報錯而是給出一個偏大的錯誤結(jié)果。最典型的問題就是三重循環(huán)的嵌套順序。正確順序是 k 在外層i 和 j 在內(nèi)層。前面講原理時說過k 每一輪代表“允許使用新加入的節(jié)點作為中間節(jié)點”這個順序是狀態(tài)轉(zhuǎn)移過程的核心。如果寫反了比如把 k 放在最內(nèi)層那么對于一對 i、j會在同一個 i、j 循環(huán)里連續(xù)嘗試所有 k。這種做法完全沒有狀態(tài)累計當(dāng)你第一次嘗試 k1 時還沒更新任何結(jié)果下一次嘗試 k2 時也沒有把 k1 的結(jié)果納入進去。最終 bug 的表現(xiàn)通常是距離沒更新夠路徑明顯繞遠或者在某些不可達的節(jié)點之間給出了不合理的值。我見過最有效的檢查方法是用三重循環(huán)順序的三層含義來幫助記憶最外層 k 代表“決策中間節(jié)點的編號上限”內(nèi)層 i、j 則是在這個限制背景下枚舉所有起點和終點。直接背 i、j、k 的順序容易錯背語義就不會踩坑。3.2 順手把路徑也記錄下來Floyd 的路徑重建比 Dijkstra 稍微繞一點。常見的辦法是開一個 next[i][j] 數(shù)組表示從 i 到 j 的最短路徑上i 的下一個節(jié)點是誰。初始化時對于每一條有向邊 i-jnext[i][j] j沒有邊的則默認保持 j 或 0。在松弛成功時更新 nextif (d[i][k] d[k][j] d[i][j]) { d[i][j] d[i][k] d[k][j]; next[i][j] next[i][k]; }這里如果想當(dāng)然寫成 next[i][j] k就錯了。因為 i 到 k 的最短路徑可能已經(jīng)經(jīng)過了其他中間節(jié)點i 走向這個新路徑上的第一個節(jié)點不一定是 k而是 next[i][k]。只有記錄 next[i][k]才能完整還原路徑。打印路徑時只需要從 next[i][j] 出發(fā)不斷跳轉(zhuǎn)void print_floyd_path(int u, int v) { if (d[u][v] INF) { printf(不可達\n); return; } printf(%d, u); while (u ! v) { u next[u][v]; printf( - %d, u); } printf(\n); }3.3 初始化、重邊、自環(huán)三個習(xí)慣一次養(yǎng)成Floyd 的初始化往往決定成敗。首先把整個矩陣 d[i][j] 初始化為 INF再把 d[i][i] 初始化為 0。接下來讀入邊。輸入如果出現(xiàn)重邊要取最小值自環(huán)即 i 到 i 的邊在非負權(quán)場景下不會對最短路有正面貢獻可以忽略但如果存在負權(quán)自環(huán)那就相當(dāng)于負環(huán)問題整個最短路都不成立通常需要單獨排查。INF 的選擇也要小心。很多人直接用 int 的 INT_MAX然后判斷 d[i][k] d[k][j] d[i][j]一旦 d[i][k] 和 d[k][j] 都是 INF兩者相加直接溢出變成負數(shù)導(dǎo)致錯誤更新。我在工程里習(xí)慣用 0x3f3f3f3f這個值約等于十億兩個相加也不會溢出 32 位 int同時還能繼續(xù)滿足“比任何真實路徑都大”的需求。更好的習(xí)慣是松弛時顯式判斷if (d[i][k] ! INF d[k][j] ! INF) { if (d[i][k] d[k][j] d[i][j]) { d[i][j] d[i][k] d[k][j]; } }這樣寫雖然多兩行但能避免所有溢出的心智負擔(dān)。數(shù)據(jù)范圍較大、邊權(quán)可能達到 10^9 時把 dist 數(shù)組的類型改成 long long判斷邏輯不變。4. 真實案例復(fù)盤一個導(dǎo)覽項目里的最短路選型4.1 一個再常見不過的場景前文提到的園區(qū)導(dǎo)覽項目最初的模型很簡單幾十個展覽點位作為圖節(jié)點點與點之間的步行路線作為邊游客想去任意兩個點位之間系統(tǒng)需要給出最短步行路線和距離。當(dāng)時節(jié)點少Floyd 一次預(yù)計算全部點對之后再查詢都是 O(1) 查表完全沒問題。后來團隊把監(jiān)控點位、商店、洗手間等大量新節(jié)點都并入了同一張圖節(jié)點數(shù)從 30 漲到 700 多邊數(shù)接近 2000圖仍然很稀疏。Floyd 的預(yù)計算開始變成瓶頸在純 Python 的調(diào)試腳本里700^3 大約三億多次操作肉眼可見地卡頓。更重要的是后續(xù)還希望支持動態(tài)修改某些邊權(quán)每次修改如果都重跑全源 Floyd體驗會非常差。這個時候真正需要權(quán)衡的問題就變成了查詢頻率高不高圖會不會頻繁更新如果只是偶爾算一次全量數(shù)據(jù)Floyd 其實也能接受但如果是頻繁的單點查詢并且圖規(guī)模不小Dijkstra 明顯是更穩(wěn)的選擇。4.2 性能對比與實測印象為了說清楚這個問題我在項目里用隨機生成的 600 個節(jié)點、1800 條邊的稀疏圖做過一個簡單對比。理論復(fù)雜度如下算法復(fù)雜度n600, m1800預(yù)估操作規(guī)模樸素 Dijkstra 單源O(n^2m)約 36 萬次堆優(yōu)化 Dijkstra 單源O((nm)log n)約 1.6 萬次Floyd 全源O(n^3)約 2.16 億次可以看到單源 Dijkstra 和全源 Floyd 差了好幾個數(shù)量級。實際跑起來C 編譯優(yōu)化后的結(jié)果更明顯堆優(yōu)化 Dijkstra 完成一次單源計算在毫秒級Floyd 跑完全源需要零點幾秒而純 Python 的三重循環(huán)要慢得多交互式查詢時卡頓感非常強。所以最終核心模塊用 C 重寫每個游客查詢時按需跑一次 Dijkstra只計算需要的那個終點路徑返回也順手。這里有個工程心得如果系統(tǒng)需要頻繁查詢“任意兩點”且圖節(jié)點少于 200Floyd 的預(yù)計算模式非常舒服查詢 O(1)代碼簡單一旦節(jié)點上了 500就要認真考慮改成“每次查詢跑 Dijkstra”或者“按熱點區(qū)域做預(yù)計算”。選型不是背復(fù)雜度公式而是理解自己系統(tǒng)中的查詢比例和更新頻率。4.3 落地時的幾個代碼細節(jié)實際落地時除了算法本身還要處理幾個工程細節(jié)。第一圖的存儲從鄰接矩陣換成了鄰接表因為 700 個節(jié)點的鄰接矩陣是 49 萬格雖然內(nèi)存上不算大但遍歷出邊時鄰接表快得多。第二輸出路徑時統(tǒng)一封裝成接口前端只拿節(jié)點序列和總距離不關(guān)心內(nèi)部是 Dijkstra 還是查表方便日后替換。第三因為圖數(shù)據(jù)來自多個信息源重邊幾乎必然存在讀入階段統(tǒng)一取最小值否則 Dijkstra 會被無關(guān)重邊干擾。這里還要提醒一點最短路算法只是路徑服務(wù)的一環(huán)真實系統(tǒng)里往往還涉及禁行路段、步行耗時估計、逗留時長等業(yè)務(wù)規(guī)則。我習(xí)慣在算法層之上做一層“路網(wǎng)服務(wù)”把最短路計算和業(yè)務(wù)規(guī)則解耦這樣算法升級或替換時上層完全不用改。5. 常見問題與排查技巧實錄5.1 隊列里全是舊數(shù)據(jù)你被坑過一次就懂了堆優(yōu)化 Dijkstra 最常見的問題就是忘記處理堆里的“過期數(shù)據(jù)”?,F(xiàn)象是某些節(jié)點的 dist 偏大或偏小程序在隨機數(shù)據(jù)上偶爾正確一旦圖復(fù)雜一點就全亂。原因很多新手分析不出來。事實上每次 dist[e.to] 被更新時我們都會往堆里 push 一個全新的 pair同一個節(jié)點可能在堆里同時存在多個不同距離的記錄。如果不對過期記錄做任何判斷程序就可能把一條已經(jīng)過期的舊距離當(dāng)成當(dāng)前距離來松弛鄰居。舉例來說某個節(jié)點先被一條較長的路徑更新入堆后來又發(fā)現(xiàn)更短的路徑再入堆。堆頂彈出的應(yīng)該是更短的那條但如果代碼沒有跳過舊記錄它可能用舊距離繼續(xù)更新鄰居算出來的結(jié)果就不是最優(yōu)。修復(fù)方式就是前面代碼中的 vis 標記或 if (d ! dist[u]) continue。從工程角度寫 Dijkstra 時最好一開始就把跳過過期記錄的代碼寫進去。這行代碼不是可選項而是正確性的必要條件。5.2 負數(shù)權(quán)邊的反直覺案例有一個經(jīng)典反例可以瞬間擊碎對 Dijkstra 的盲目信任。假設(shè)起點是 s存在 s-a 邊權(quán) 5s-b 邊權(quán) 6b-a 邊權(quán) -2。直觀上s 到 a 的最短距離是走 s-b-a路程 4但 Dijkstra 一開始會選擇從 s 出發(fā)距離更小的 a直接鎖定 5然后才處理 b。最終它輸出的 s 到 a 的距離是 5而正確答案是 4。原因在于 Dijkstra 鎖點依賴的是“繞路不會更短”的性質(zhì)而負權(quán)邊徹底破壞了這一點繞路雖然經(jīng)過更遠的點但負權(quán)可能把總代價拉回更低。所以只要輸入里有負權(quán)邊Dijkstra 就必須徹底換掉改用 Bellman-Ford 或 SPFA。Floyd 可以處理單個負權(quán)邊但對負環(huán)無能為力。遇到負權(quán)先想想問題本身是否合法再進行算法選型。5.3 越界與溢出的隱蔽 Bug最短路代碼里最隱蔽的錯誤不是邏輯混亂而是 INF 加法溢出。當(dāng) INF 取 INT_MAX且兩個不可達節(jié)點的距離相加時結(jié)果溢出成負數(shù)程序反而認為它是一條更短路徑。這種事在 Floyd 的樸素寫法和 Dijkstra 的比較條件里都可能出現(xiàn)。我推薦的防御姿勢有兩個。第一個是 INF 用 0x3f3f3f3f保證 INF INF 不溢出第二個是寫比較時拆開判斷像前面 Floyd 初始化那節(jié)寫的一樣先判斷不等于 INF再做相加比較。如果數(shù)據(jù)范圍很大干脆把 dist 數(shù)組聲明為 long long用 long long 的 INF比如 4e18徹底告別整數(shù)溢出問題。很多比賽選手習(xí)慣性地開 long long不是沒有道理的。5.4 怎么快速驗證算法寫對了寫完之后怎么確認實現(xiàn)正確單靠眼睛看代碼通常不夠。我最常用的方法是構(gòu)造小圖手算。找一個五六個節(jié)點的樣例把 dist 數(shù)組按輪次手推一遍跟程序輸出對比。這個過程不麻煩但能快速暴露初始化、循環(huán)順序、路徑輸出等細節(jié)問題。第二個方法是對拍。邊權(quán)全部設(shè)為 1 的圖Dijkstra 的結(jié)果應(yīng)該和 BFS 的層數(shù)完全一致用這段代碼對比很快。更通用的對拍是用 Floyd 驗證 Dijkstra隨機生成一張小圖跑一遍 Dijkstra 得到單源最短路再跑一遍 Floyd 得到全源最短路比較特定起點的所有 dist 是否一致。如果兩者對不上說明其中某個實現(xiàn)有問題。由于 Floyd 結(jié)構(gòu)簡單通常默認它是基準。這個“暴力對拍”的思路在工程里也常用把新實現(xiàn)和線上基準跑同一批數(shù)據(jù)用腳本自動比對輸出能省下大量排查時間。6. 用不上的時候也要知道進階方向6.1 有負權(quán)邊的全源場景如果一張圖既有負權(quán)邊又需要全源最短路直接跑 n 次 Dijkstra 是不行的因為 Dijkstra 根本不能處理負權(quán)。這時候可以了解一下 Johnson 算法它的思路非常經(jīng)典先跑一遍 Bellman-Ford 給每個節(jié)點算一個“勢能”然后用勢能重新調(diào)整所有邊的權(quán)重把所有邊權(quán)變成非負數(shù)最后再跑 n 次 Dijkstra。調(diào)整權(quán)重的方式是對于每條邊 u-v把實際權(quán)重變成 w h[u] - h[v]。這個變換的好處是最短路徑不會因為變換而改變因為路徑上的勢能項會前后抵消。工程中很少需要自己實現(xiàn) Johnson但理解它有助于建立完整的算法知識體系。面試中如果被問到“負權(quán)全源怎么處理”能說出 Johnson 的思路是很加分的。6.2 比 Dijkstra 更快帶上啟發(fā)式在路徑規(guī)劃場景中Dijkstra 在一個很大的圖上找單個目標點時會把圖里大量無關(guān)區(qū)域都擴展一遍。這個時候可以用 A* 算法它在 Dijkstra 的基礎(chǔ)上增加一個啟發(fā)式估計 h(n)表示從當(dāng)前節(jié)點 n 到目標點的估算代價。只要 h(n) 不過度估計真實代價A* 就保證找到最優(yōu)路徑而且擴展的節(jié)點數(shù)通常遠小于 Dijkstra。Dijkstra 相當(dāng)于 h(n)0 的特例所以從 Dijkstra 遷移到 A* 的代碼成本非常低主要改動只是把優(yōu)先隊列里的排序鍵從當(dāng)前距離變成當(dāng)前距離加啟發(fā)值。地圖導(dǎo)航、游戲?qū)ぢ防镒畛R姷淖龇ň褪?A* 配合柵格地圖這也是最短路算法的經(jīng)典應(yīng)用延伸。如果做的是實時路徑規(guī)劃A* 往往比單純堆優(yōu)化的 Dijkstra 實用得多。6.3 當(dāng)圖變成了動態(tài)圖真實系統(tǒng)中幾乎沒有永遠靜態(tài)的邊權(quán)。路況變化、場地臨時封閉、某個節(jié)點暫停開放都會讓之前的計算結(jié)果失效。最直接的做法是重新跑一遍算法但如果圖很大而且更新頻繁重復(fù)計算成本太高。這個方向上的常見策略包括局部更新、增量維護、或者把圖拆成區(qū)域預(yù)處理。最短路動態(tài)更新的核心困難在于一條邊變化可能影響很多節(jié)點但通常影響范圍是局部的。工程上的一個簡單思路是先用舊結(jié)果判斷受影響的節(jié)點范圍再在局部重跑 Dijkstra。很多商業(yè)導(dǎo)航系統(tǒng)背后都有類似的增量計算邏輯但實現(xiàn)復(fù)雜度明顯高于靜態(tài)算法。日常開發(fā)中如果遇到動態(tài)圖不要急著寫復(fù)雜的增量邏輯先評估更新頻率很多時候“重新跑一次”反而是最簡單也最穩(wěn)定的方案。我個人在實際項目里的體會是最短路算法看起來是圖論里的基礎(chǔ)題但真正用好的關(guān)鍵是知道每個算法的前提條件、復(fù)雜度數(shù)量級和最容易被忽視的細節(jié)。Dijkstra 的貪心鎖點、Floyd 的三層遞推都值得親手寫一遍、親手掉一次坑。如果你正在學(xué)習(xí)這塊我建議從一張六節(jié)點的小圖開始手動推一遍 dist 數(shù)組再用代碼跑一遍最后把打印出來的路徑逐條讀一次。這個過程比背十個模板都有用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99久久久久久亚洲精品不卡| 爱爱动态120秒| 99精品高潮| 九九这里只有精品| 五月天婷精品激情| 亚洲伊人久久综合97| 亚洲情色在线| 少妇免费视频| 操99| 高清一区AV无码| 超碰欧美97| 亚洲欧洲日韩中文字幕一区| 青青伊人加勒比海| 亚洲精品97p| 久热精品色情| 东北女人被操| 亚洲一二三四区机械| 天天操综合网| 国产精品免费视频不卡| 在线观看精品国产免费| 婷婷五月天激情小说| 日韩在线性爱免费视频| 国产成人免费观看在线视频| 91欧洲国产成人久久精品网站| 51一区二区三区| 性生活无遮挡纯毛片在线看| 在线 亚洲 网爆 自拍| 116美女午夜| 激情综合五月| 精品久久久亚洲AV成人网站| 日本欧美一区二区三区免费| 999精品国产高清一区二区| 亚洲加勒比色图| 欧美性爱一区| 在线天堂999| 大稥蕉免费视频这里只有精品| 不卡啪啪视频| 亚洲午夜AV| 欧美日韩香蕉| 色综合网1| 91操人| 久久直播国产| 免费看欧美美女黄色大片| 色婷婷视频| 女人双腿搬开让男人桶| 色色无码| 亚洲一二三精品久久网| 91美女在线视频| 2025亚洲男人天堂| 色婷婷一区二区三区久久午夜| 国产久久一区二区| 超碰在线综合97| 青青久日| 老熟女乱伦一区| 午夜乱轮操逼视频免费看| 日本成人A片网站| 成 人片 黄色大片| 亚洲夜夜欢无码一区二区| 九热视频| 中文字幕天天天天天| 亚洲 se图 欧美电影| 久久超碰98| 天天天操天天天爱| 色噜噜国产精品视频一区二区| 久久这里只有精品9| 亚洲国产精品V?在线播放| 亚洲一区二区三区不卡国产欧美| 国产女性无套 免费观看| 精品久久人妻成人网| 五月婷色| 蜜臀色乳| 久久久久99999| 国产免a费看黄片在线| www色色色com| 禁十八久久| 97网址97| 日韩欧美亚洲自拍偷拍| 操逼不卡中文字幕| 久久久久久久久久久久九| 啊嗯嗯啊好大好爽| 色香AV| 超碰在线观看av不卡| 五月色综合| 伊人国产视频| 欧美黄业| 欧美日韩中文亚洲v在线综合| 久久女人一区二区三区| 欧美大片天天看| 日韩欧美女求操每天更新| 欧美aaaaaaa| 亚洲精品天天影视综合网 | 成人免费看吃奶视频网站| 亚洲砖码砖专无区2023| 久久av网| 2017天天操| 国产操逼逼网| 天天摸夜夜操视频| 高清国产无码av| 亚洲中文字母在线播放| 中文字幕诱惑制服人妻丝袜美丝袜美 | 熟女少妇视频| 欧美性爱十八禁| 美女91在线观看| 久久专区| 青青草原人妻| 超碰地址久久| 欧美色色色| 人妻黑丝袜电影| 国产超碰AV在线精品| 性吧在线视频| 欧美色乱| 婷婷情色综合网| 性欧美| 日本精品不卡一二三区| 日日日日做夜夜夜夜做无码97| 性色av大全| 蜜臀久久99精品久久综合| 日韩毛片9| 亚洲欧美日韩精品久久久一区二区| av麻豆啪啪| 97在线视频观看网站| 婷婷色香| 国产亚洲日韩欧| 亚洲综合图色在线| 97人妻免费中文字幕| 97精品中文字幕| 国产操操日韩三级黄| 综合天天网| 久久综合九色综合欧洲98| 99精品久久久久久久婷婷| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国内精品不卡无毒99999| 三级色影综合网| 五月婷婷综合激情| 黑人免费福利视频| 久啪| 日韩精品视频在线观看一卡二卡| 欧美啪啪天堂| 色av中文字| 绯色一区二区三区不卡少妇| 激情综合av| 亚洲精品乱码线路中文字幕| 日韩美女,国产传媒,视频一区| 日韩精品 视频一区二区| 强奸熟女一区二区三区| 综合欧美日本三级| 无码天天操| 9 1超碰九色| 岛国精品视频在线观看| 久久午夜色播影院免费高清| 丝袜天堂| 天天操天天插| 激情视屏国产乱伦强奸| 超碰碰97资源站| 欧美少妇大量自拍视频在线观看| 久久av一级av少妇av高潮| 精品中文一区二区| 东京太热久久久| 久久伊人亚洲AV无码网站| 日本蜜桃| 丁香五月婷婷色| 强奸抽插av| 人人妻天天做天天爽| 丁香五月婷婷五月| 久久毛卡| 一个国产在线综合网站| 久久久精品电影| 天天综合,91入口| 精品久久99| 91精品无码人妻系列| 精品九九九九九九| 亚洲高清少妇| 99啪| 日日夜夜狠狠| 黄色AAAAA欧美| 欧美亚洲首页| 国产精品久久久久久9999| 久久麻豆一区二区| 综合欧美日本三级| 久操com| 欧美天天综合在线| 日本高清一本二本免费不卡| 亚洲视频一二区| 亚洲综合色男人网| 1769精品一区二区三区| 999亚洲国产视频| 国产精品九九九| 久久久免费视频18| 骚妻少妇精品性色无码四色A V| 国内黄色精品| 伦在线97| 无码人妻丰满熟妇区毛片| 成人在线视频一区| 美女在线H91| 乱老女人一区二区视频| 色青青久久影视| 中文字幕一区二区免费在线| 成人午夜高潮av猛片| 最近二区三区视频大全| 午夜噜噜噜| 久久九操在线观看| 91日产桃蜜| 久久禁| 国产后入内射| 中文字幕国产| 东京热毛片177b2viP| 久久亚洲一区女同性恋中文字幕 | 岛国激情视频在线观看| 国产AV色黄看到爽| 无码丰满熟妇一区二区浪潮AV| 操国产逼| 日本三级A片网站com| 黑人白女精品一区| 丁香五月综合| 91丨九色丨国产打屁股| 婷婷五月天激情小说| 亚洲色综合| 东京热亚洲一区二区| 婷婷五月天基地| 亚洲操逼网| 色五月av| 99只有精品| 日韩精品99久久久久久中文字幕| 亚洲熟妇综合久久久久久| 2017天天透天天通天天擦| 亚洲污污网站| 日本综合色图| 爱妃国产亚洲视频中文字幕| 操B视频日韩无码| 狠狠中文字幕| 国内毛片无码一级毛片| 嗯啊免费视频| 国产乱人妻精品入口| 99在线啪| 伊人久久综合影院精品久久久| 2019精品国产无码成人| 思思性爱| 久久免费看高潮毛片韩国| 日欧毛片久久| 97欧美超碰| 日韩免费看在线黄色片| 中文自拍欧美影视| 自拍盗摄一区| 少妇熟女一区二区三区| 亚洲天堂AV在线播放| 欧美精品1区2区3区| 一起草av| 久神马| 97精品网| 黄色免费网页无码| 欧美 亚洲 制服 精品| 97超碰中文| 91五十路| 欧美麻豆成人同性GⅤ在线| 天天欧美色| 少妇专区一二三四五| 天天操妹子| 欧美一级特黄淫片在线观看| 九九在线视频| 青操影院| 天天操天天干一区二区| 97超碰天天爱天天爱| 国产精品69久久久久孕妇欧美| 久热一区二区| 久久人人看| 国产免费久久精品99re韩国| 色欧美亚洲| 黄色大香焦1级‘′‘| 久久久久久久久久久久久9999| 男女香蕉一区二区| 十八岁啪啪视频免费看| 色鬼在线综合| 久久久久久九| 亚洲欧美经典一区二区| 亚洲熟女偷拍在线观看| 人妻一二三区| 高潮嗯啊性感美女久久久| rion磁力链接| 高清无码国产亚洲| 日本免费二区三区| 开心五月天激情网| 97这里有精品| av中文字幕在线熟女| 久久99久久99精品天美传媒棢·纸:. | 国产亲戚伦亲在线| 91无摭挡| 中文久久爆乳| 亚洲图片偷拍欧美| 国产精品香蕉热久久新品| 影音综合网| 亚洲一二三四区| 亚洲操操| 亚洲成人ab| 色婷婷五月天| 激情综合网亚洲| 欧美|91色综合| 东京热,男人的天堂| 国产一级黄色片在线观看| 亚洲精品蜜桃久久久久久久| caorenqi shipin| 88在线一区二区三区| 欧美一级黄色18片免费看| 国产亚洲日本| 插日本熟女视频| 九九九只有精品| 久久草大香蕉| 亚洲毛片基地专区| 九一精品牛牛一区二区| 国产网站在线播放| 五月天精品| 五月丁香在线| 色屁屁影院www国产| 9超碰免费| 亚洲色图尤物视频| 清纯唯美综合亚洲| 男人天堂2019亚洲| 夜夜草我| 亚洲色图自拍| 91人妻丝袜无码| 人人操,人人插| 99只有精品| 人妻人人做人人澡人人爽欧美一区| 99re在线视频国产| 国产黄a三级三级三级av在线看| 久久亚洲AV无码白度| 亚洲AV资源| 国产精品69人妻无码久久久| 国产成人五月天丁香花| 欧美色图下一页| 91精品人妻电影| 欧美宗合色| 人妻大相焦在线| 久久欧美性爱视频| 中文字幕日韩专区精品系列 | 美中日韩无码| 午夜舔阴达高潮视频免费看| 四虎精品亚洲| 在线视频一区二区传媒| 丁香五月激情综合国产| 中文人妻av高清一区| 婷婷五月天色网| 男人天堂.AB| 天天草天天干天天日| 少妇久久久| 中文字幕伊人| 老熟女熟妇| 综合久| 天堂无码精品国产久| 少妇激情一区二区三区视频| 久久久111| 日本亚洲vr欧美不卡高清专区| 亚洲 欧美 制服 另类 自拍| 丰满人妻一区二区三区四区| 是还免费视频1727我| 中文字幕五区| 大香蕉五月天| 国产92麻豆天美精品色欲5| 国产精品 视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 日韩在线欧美精品一区二区| 亚州欧美在线| 另类专区加勒比| 国产夜夜操| 色五月婷婷麻豆在| 欧美成人一区二区三区在线播放 | 岛国人妻少妇av在线观看| 欧美精品偷拍| 黄色网址久久精品欧美喷水| 强奸a片网| 午夜无码精品免费看性色| 一个色导综合| 91福利网在线观看| 免费视频一二三区| 日韩有码中文字幕女同性恋| 亚洲日精品| 欧美极品少妇| 中文字幕国产| 欧美宗合色| 亚洲 欧美 日本 国内 首页| av2014 日韩在线中文字幕| 超碰69| 91超碰碰在线| 青青草狠狠撸| 色天天野狼综合社区| 久久精品电影| 精品欧美日韩在线观看| 91插B网站| 97日韩欧美亚洲| 97精品一区二区视频在线观看| 91激情国产| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 2000亚洲男人天堂| 熟女高潮合集-永久久久-成人AV| se,,,亚洲欧美| 色爽——AV| 爱丝福利| 探花精品 一区二区| 插入逼91| 欧美日韩性爱操大逼| 深田咏美亚洲精品福利社 | 9精品久久久久| 97国产人人| 国产高清亚洲日韩一区| 欧美Aⅴ| 欧美大香蕉专区网| 性爱久久| 中文字幕乱碼在线| 亚洲色图第四色| 亚洲情色 自拍| 天天综合网网欲色| 95自拍视频在线观看| 亚洲一卡2卡3卡4卡乱码网站| 亚洲Av无码成人精品国产| 久热免费视频| 91麻豆一二三区| 东北女人高潮视频| 久久免费99精品久久久久久| 91在线精品| 欧美夜夜狠| 日日A∨| 日韩成人小视频| 精品蜜乳AV免费观看| 岛国视频一二三区| 亚洲色鬼| 熟女91网| 久久精品人人做人人看| 久久久婷| 青青欧美| 国产福利一区二| 精品人妻二区三区| 久久精品人妻一区二区| 国产成人在线观看网址| 99久在线精品99re8| 亚州成人a∨| 九九久精品| 激情小说日韩无码| 久久久无码国精品无码三区三区| 亚洲91网站| 婷婷涩嫩草鲁丝久久午夜精品| 久久夜黄色无码A级大片| 色一射色一射| 久久岛国| 99操视频| 青青草一本道福利视频| 国产精品蜜乳AV| 欧美五区| 日韩操啪| 97精彩视频网站| 超碰欧美COM| 看大黄色大片原件| 九一综合精品视品av| 久操频道免费在线呗看| 久久久精品视频免费观看| 69AV女优男人的天堂| 婷婷20月天青娱乐| 国产激情在线| 久久久久幕乱码| jk白丝没脱就开始啪啪| 亚洲青色欧美| 国产精品爽爽v| 亚洲欧洲精品成人| 99久久精品欧美国产| 97亚洲综合电影| 欧美色干| 精品一区二区3区| 美女t无毒不卡不卡| 色情乱伦AV| 天天色踪合| 韩国一级AAA| 96国产污污污丝袜| 亚洲成人美女无吗| 深夜激情 | 亚州性色| 亚洲欧美激情另类色图| 亚洲 暴爽 AV人人爽日日碰| 97超碰美国| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 成人精品在线观看| 天美传媒AV在线播放| 中文字幕高清20页视频| 超碰午夜| 久9久精品视频| 亚欧无码在线| 中文有码9| 国产欧美美女免费观看视频| 亚洲男人综合| 夜夜爽爽夜夜精品视频| 五月丁香成人网| 国产精品白丝| 自拍视频大全亚洲专媒视频/一区二区三区 | 免费黄色片。| com 首页 18岁 禁区 女优 免费 精选 同城 | 日本一级性爱| 丁香九月婷婷| 物尤视频一区二区| 99热这里只有精品地址| 97亚洲在线| 九热大香蕉| 熟女人妇一区二区三区| 少妇高潮九九九九| 欧美亚洲高清不卡| 五月天激情网图片| 老熟女乱伦一区| 超碰综合97在线| 色嘟嘟人妻天堂网| 中文字幕日韩人妻视频一区二区三区| 日日躁天天躁狠狠躁| 国产青一二三| 久久久久久AV无码免费网站| 搡老熟女免费视频| 狠狠干妹子| 人夜夜精品网站香蕉嫩草| 91av一区二区在线观看| 天天夜夜rb| juliaann丝袜大战黑鬼| 久久99热这里只频精品6学生| 亚洲天堂五月天国产| 亚洲自拍青操视频| 91中文精品日韩欧美在线 | 久久久无码精品人妻二区| 日韩 人妻 精品| 簧片免费看视频| 亚洲成人性| 欧美性天天影视| 国产91亚洲精品一区二区三区| 欧美天堂超碰97| 清柠毛片| 国产成人精品亚洲日本| 嫩草在线视频| 国产色产精品在线观看| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 精品人妻丰满熟妇一区二区三| 色婷婷综合久久中文字幕雪峰| 在线99热| 国产三级日产三级韩国三级| 亚洲AV无码乱码| 超碰97丝袜| 东京男人天堂| 欧美激情精品久久久| 亚州色图狠狠干| 99久久这里只有精品| 大香蕉乱伦视频网| 国产福利小视频高清在线观看| 欧美真人抽搐一进一出gif| 玖玖爱视频网站| 丰满欧美放荡少妇在线| 97在线资源| 大香网伊人久久综合网eew| 麻豆视频test| 欧美亚洲激情小说| http://qxhbdz.com| 久久婷婷五月| 69人妻精品一区二区绯色| 色欲日韩欧美在线一区| 欧美日韩性爱操大逼| 国产www色在线观看| 欧美性生活免费网| 成人a大片在线观看| 秋霞成人一级在线观看| 2020中文在线一区二区三区| 久久黄色视频一区二区三区| 亚洲制服aⅴ中文字幕| 2017人人操,人人摸| 亚洲无码国产精品久久| 久久五十路熟女人妻| 八戒无码国产午夜福利| 777AV电影| 日韩激情小说一区二区| 色yeye成人免费视频| 熟女精品va中文字幕| 免费黄色A片| 人人透人人操| 天天摸,夜夜摸| 丝袜内射| 久久AV色| 97极品无码| 26uuu久久| 欧美性生活免费网| 久久久国产三级黄色片| 欧美亚洲国内自拍| 亚洲自拍欧美国产首页网曝| 97欧美久久久久久久| 日韩本不卡视频在线观看| 欧美翘臀视频网站一区二区三区| 在线日韩日本亚洲国产| 岛国黄| 亚洲欧美精品福利在线| 欧美日韩情色一区二区| 亚av顶级裸体一区二区三区四区五区 | 久久綜合很很很| 日韩亚洲97| 人妻丝袜一区二区三区在线| 性久久久| 丁香色婷婷| 亚洲成人精品久久久| 亚洲中文字幕一区| 国产 日韩,欧美 自拍| 黄色AAAAA欧美| 九九热最新| 国产九区| 久久一二三四| 日韩性爱电影一区| 一个人在线看的黄色电影网站| 是还免费视频1727我| 91爱| www.av在线观看| 九九英色视频| 91色婷婷综合久久中文字幕二区| 国产高清精品一区二区三区毛片 | 国产精品suv一区| 日韩图色| 久草福利在线资源站| 800zy一区二区| 超碰色大香蕉| 无码精品一区二区三区潘金莲| 欧美日不卡| 国产AV线| 中文字幕亚洲永久精品| 欧美亚洲国内自拍| 久伊人网78| 黄色AAAAAAAAAAA大片| 草b在线| 密臀视频三区免费网站| 天天视频黄网站| 亚洲免费97免费| a'v在线资源| www.超碰| 人人操超碰在线| 青娱乐国产盛宴视频| 欧美性,色九九| 免费国产视频| 打av高清| 偷拍 欧美 日韩| 久久婷婷国产一区二区色| 久久超碰天天| 免费黄色A片| 久热大香蕉网站| 秋霞无码av鲁丝片一区| 99色骚| 亚洲一区二区三区播放在线| 夜夜狠狠躁日日躁色视频| 成人国产视频在线观看| 日本人妻一区二区| 国产精品点击进入在线影院高清| 五月婷婷丁香| 福利视频网站| 人人手机欧洲亚洲国产人妻| 国产400孕妇孕交群| 深夜啪啪啪视频免费| 欧美日韩亚洲天堂| 91色碰| 亚洲自拍偷拍视频在线| 欧美在线伊人色| 久久丁香久草综合网| 久热精品色情| 欧美,日韩综合久久| 天天日美女的B| 操比国产| 好吊色青靑草| juliaann精品熟女一区| 免费啪啪av| 美女91av| 综合熟女| 操逼无码操逼| 欧美亚洲高清不卡| 手机在线看片免费人成视频| 精品无码久久| 欧美老熟另类| 在线色导航| 成人夜夜| 久草精品热视| 国产熟女完整版中字| 破处bbq| 欧美|91色综合| .精品人妻一区二区三| 婷婷久草| 久久久精品国产亚洲伊人| 久久久久亚洲熟妇熟女| 东北操逼| 98色网| 日韩激情啪啪啪| 78m成人视线| 夜夜嗨AV蜜臀av| av无码av无码专区| 久久综合97| 日韩情色AV| 亚洲高清无码免费观看视频| 新亚洲无码| 超碰这里有精品| 日本久久久久久久久| 巨爆乳一区二区爆乳区| 懂色Av一区二区三区| 久草婷婷| 六九九九| 艹比视频国产精品| 无码一区免费在线不卡| 中文字幕二区| 国产精品 午夜福利| 毛片电影一区二区三区| 中字幕人妻一区二区三区| 九九这里只有精品| 四虎884a| 久久五月份| 久久精品国产亚洲AV高级北京| 国产熟妇 码视频户外直播| 九草九九九| 久久精品老司| 欧美精品另类人妖xxxx| 探花激情视频| 香蕉久久AⅤ...| 91久久| 色九九久九九| 欧美综合网1| 爽爽爽免费视频| 美女刺激久久国产欧美| 欧美精品久久久久久久久88| 日韩黄色av中文字幕| 97在线观看免费视频| 国产夫妻性生活视频| 久久爱超碰网| 午夜天堂精品久久| 好湿好紧好爽 视频| 久久婷五月| www黄片免费看com| 欧美αv.com| 免费αV在线视频| 色吧91| 亚洲欧美不卡线| 精品一区二区三区18| 亚洲交换| 综合大香蕉美。| 91男同| 色拍偷亚洲| 韩日精品福利视频一区不卡在线免| 国产四虎在线| 91美腿丝袜在线观看| 人妻少妇蜜桃视频欧美一区| 久久精彩视频| 狠狠干综合| 丝袜美腿欧美| 人妻久热在线| 欧美一区二区在线资源| 99啪啪视频| 影音综合网| 国产精品网站免费| 黄日韩| 午夜精品人妻二区三区| 亚洲一区制服诱惑| 国产中文字幕在线观看| 亚洲丝袜二区在线| 97国产精品一区| 国产深喉视频一区二区| 精品免费视频国产一区| av爱爱爱| 中文字幕一区电影在线观看| 操高情无码| 国产精品99久久久www| 免费AV播放| 香蕉在线一区二区三区| 蜜臀精品1区2区| 农村妇女精品一区二区| 久久9精品网站| 亚洲美女精品九九视频| 亚洲av青草久久一区二区| 内射夫妻三片| 色乱二区| 亚洲图片欧美日韩| 热久日综合| 久久激情四射婷婷丁香五月天| 中国91AV| 91性高朝久久久久久久久| 欧美日韩国产高清在线一二三区| 91人妻Pr| 人人爱夜夜爱| 少妇高潮喷水无套久久久久久| 97伊人| 无码 黑人一区二区三区| 伊人久操| 欧美第一页性| 色五月激情AV在线| 伊人操| 波多野结衣先锋影音| 99久久久99久久91熟女| 久久视网78| 国产综合久| 97人人夜夜精品视频| 操99| 人妻人妻天天碰| 91综合网站| 18禁中文字幕| 人人天天欧洲| 熟女91网| 国产日韩手机视频在线| 婷婷伊人綜合中文字幕| 最新精品久久蜜桃| 天天噜| 国产AV高清AV无码| 屌妞视频久久久久久久| 亚洲人妻精品一区二区| 极品尤物自安慰| 久久久久久久久久久久久久久乱码 | 台湾佬大香蕉| 先锋色眉乱伦资源| 一牛影视久久久一区二区三区| 精久久久| 国产av强奸美女| 久久久久久夜夜夜夜夜| 色天天野狼综合社区| 欧美91视频| 夜夜夜久久| 熟妇人妻丰满久久久久久久无码| 操逼1区| AV丝袜少妇| 中文字幕蜜乳av| 色综合久| 亚洲 欧美 日本 国内 首页| 久草视频观看视频在线| 97人人爱人人做人人乐| 美女诱惑一区| 91一区二区| 欧美九九九| 日本 欧美 国产一区| 中文一区在线日| 巨爆乳一区二区爆乳区| 欧美亚洲一区二区久久久婷精品大包诱| 亚洲欧洲日韩中文字幕一区| 人妻99p| 春色综合免费| 国产呦精品一区二区三区下载| 天天色怡春院| 免费一级特黄特色大片在线观看看| 97久久超碰国产网站| 日本伦乱九九九综合| 91人人爽人人爽| 999久久久| 久久国产精品91| 思思热国产高清| 不卡超碰护士AV在线免费播放| 97亚洲中文| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 久久综合婷婷| 天堂性色| 大香蕉伊利av| 亚洲欧美国产va在线播放频| 91精品人妻一区二区三区蜜桃臀| 日韩性爱一级片| 国产传媒美日韩av| 6080YYY午夜理论片在线观看| 伊人991| 肉嘟嘟www视频在线观看高清| 亚洲综合色在线| 欧美很很操视频| 九九九九九精品视频| 中文字幕啊啊啊在线观看视频| 欧美日韩资源| 中文一区二区婷婷视频| 99久久久久久亚洲精品不卡| 免费网色网站| 黄色欧美性爱视频| 欧美性高潮在线| 国产原创精品| 韩国黄片aaaa| 东京热,男人的天堂| 欧美亚洲综合色| 欧美岛国精品在线观看| 亚洲无限观看| 99色在线视频| 超碰免费人妻人人| 国产精品久久久久久夜夜夜夜| 久久欧美性爱视频| 欧美懂色综合网| 99青青草国产视频| 综合久久中文字幕综合日韩精品| 天天爽天天操啊啊啊| 亚洲自拍欧美国产首页网曝 | 鸥美极品| julia高潮后不停追击中出| 亚洲中文字幕精品一区| 日韩久草| 在线啊啊啊啊| 欧美一区二区观看在线| 免费一二区| 激情婷婷丁香| 欧美日韩国产中文精品字幕自在自线,| 性爱视频啪啪啪啪| 欧美色综合网| 亚洲欧洲久久天堂| 天天综合91在线| 免费精品中文字幕| 老熟女网站| 久久精品高清无码一区| 久久精品免费| 欧美性爱五月天| 收看日本人日bb| 欧美色另类| 91男同| 久久久久久久久久久久久9999| 91强热人妻| 亚洲婷婷综合网| 蜜臀Av一区二区三区| 99色婷婷中文字幕乱色| 亚洲欧洲偷拍一区| 黄片直播三级黄片两女一男| 97色伦97色伦国产欧美| 国产欧美另类久久久精品课程| 国产精品视频| 江都AV在线| 天天弄天天操| 婷婷亚洲五月***久久| 国产一级高跟丝袜| 女沟厕偷窥piss小便| 亚洲欧洲日韩中文字幕一区| 亚洲国内精品成人不卡| 日韩精品人妻中文字幕有码午| 日本三级大片| 欧美一级做a爰片免费视频| 国产操逼视频在线观看| 熟女探花啪啪| 伊人久久AV诱惑悠悠| 麻豆一区二区三区在线看 | 精品国产无码中文| 亚洲色婷婷久久91| 97亚洲在线| 传媒在线观看一区二区三区| 欧美性视频二区三区| 青青草字幕AV| 歐美性天天| 国产乱弄免费在线视频。| 人妻一区二区三区| 国产乱婷婷精品二区三区| 精品久久久久久亚洲| 亚洲色五月| 91综合在线| 久久五月婷| 99啪啪| www.天天干| 婷婷五月天补不补| 亚洲精品丝袜-不卡成人免费……| 九月丁香| www.夜夜| 日本特黄f c2| 欧美亚洲性爱一区二区| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 91影库| 天堂无码精品国产久| 久久久无码av精| 久久99午夜精品一区人妻| 国产精品自拍欧美在线| 综合欧美日本三级| 99精品久久| 大香蕉操久久| 日本999精品视频| 亚州春色| 99久在线精品99re8| 日本在线999| 欧美少妇色图| 奇米四色网| 欧美性巨大╳╳╳╳╳高跟鞋| 粉嫩绯色AV一区二区在线| 成人精品在线| 成人贴图日韩欧美| 97中文字幕色| 四虎影视永久在线观看精品免费网站| 一区二区三区四区五区久久久久久| 久久久久久人| 91亚洲欧洲| 亚洲国产av中文字幕久久 | 超碰在线日韩一区| 久久久久久九九九九| 性色av大全| 亚洲欧美国产其他二区| 人妻熟女字幕一区二区| 日韩 欧美 校园一区| 亚洲综合另类色图| 欧美99999| 中国一级操逼视频| 丁香五月婷婷色| 天天摸夜夜摸| 欧美丝袜美女电影一二三四区| 在线二区不卡| 一二三四视频中文字幕在线看| 国内毛片国产专区二| 日本三级久| 日日噜噜夜夜久久亚洲一区二区| 9I1性色影院| 麻豆国产视频精品观看| 亚洲AV无码乱码在线观看性色| 色噜噜人妻av 中文字幕| 老熟女中文字幕高清| 久午视频| 國產尤物AV尤物在線觀看| 嗯嗯嗯啊啊啊在线免费观看| 日韩不卡一二三四| 国产高清自拍视频| 曰韩av中文字幕专区| 亚洲精品天天影视综合网| 9久9久| 天天色,天天干,天天干| 亚洲一区二区麻豆影院| 狠狠爱AV| 欧美一二三级精品在线| 1024日韩| 岛国999| 久久这里只精品免费福利| 国产免费久久久久| av东京热男人的天堂| 日韩三级伊人| AV九九| 国产精品69久久久久久久 | 亚洲宗合网| 婷婷伊人五月| 久久久久成人蜜桃精品| 亚洲日本大香蕉1| 日韩人妻制服丝袜av| 亚欧美天堂在线| 久操免费观看| 免费一级毛片在线视频观看| 小骚逼被操的爽不爽| 国语对白露脸XXXXXX| 69超碰综合| 深夜视频| 91久久久久久久久18| 舔舔啊| 91成人在线免费视频| 日韩电影天堂视频一区二区| 久久精品国产精品一区| 爱爱动态120秒| 丝袜AV一区二区三区| 91站街按摩店老熟女熟女| 国产少妇内射| 强奸乱伦日韩AV| 色悠久久久av| 日韩久久.一级黄色片| 性爱AV天堂| 国产精品视频麻豆入口| 亚洲第一二区另类图| 亚洲成aⅴ人片不卡无码| 超碰 另类 欧美| 免费精品国偷自产在线在线 | 日韩人妻有码免费视频| 欧美久久婷婷| 欧美一级黄片视频在线| 亚av顶级裸体一区二区三区四区五区 | 欧美不在线| 国产精品青青草| 久久只有精品| xxx亚洲午夜天堂| 在线观看不卡一区二区三区| 精产国品一区二三产品| 欧美日韩黄片精品在线| 麻豆精品天美| 国产中文字幕曰本毛片| 9九九国产| 婷婷99狠狠躁天天躁| 伊人91| 久久久精久久久| 天天操天天射天天日| 91熟女.com| www.婷婷六月天| 九九碰九九爱97超| 97资源欧美| 熟女乱伦A| 97久久久久久久久久| 男人天堂一区二区| 欧美性爱第一页久久| 亚洲色资源| 激情av| 日韩免费中文字幕视频| 欧美91网站| 综合一区中亚洲国产成人综合精品| 欧美丝袜中文字幕07在线| 天天干天天操天天拍| 一级性爱啪啪视频| 黑白配性爱AV成| 久久精品视频久久久| 欧美亚洲| 91伊人| 亚欧美综合网。| 亚洲老熟妇xxx| 超碰国产精品久| 欧成人在线| 蜜臀久久99精品久久久久免费观| 亚洲97久久精品亚洲| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 一区=区三区视频| 国产一区二区在线电影| 久久91| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 二对二中文字幕。| 国产一区二区三区精品观看啪| 国产一级内射高清视频| 中文字幕诱惑制服人妻丝袜美丝袜美| 五月丁香六月激情综合| 一本久道在线综合视频| 99re视频这里只有精品| 九九热精彩视频| 欧美不卡在线美女| 多乙久久久久久| 三级日本一区二区三区| 久久精品女同亚洲女同13| 老熟女熟妇| 婷婷久久综合| 嫩草影院性色| 超碰97人人cao| 精品国产乱码久久久| 91爱看| 99999精品成人| 五月激情综合网| 久久无码电影| 亚洲好看强奸乱伦| 起碰97| 亚洲高清色综合| 欧美九一精品久久久熟妇| 爱爱动态试试看6 0秒| 五月天婷婷欧美三区| 国产大学生高潮在线播放| 蜜乳Av成人片网站| 亚洲影院成人| 亚洲欧美碰碰| 久操视频在线| 男人的天堂日韩| 丝袜美腿校园春色| 蜜臀在线免费观看在线免费观看| 99精彩视频| 中文字幕精品资源在线| 日本免费人成视频播放120秒| 日本人妻丰满熟妇久久久久久| 欧美性暴力猛交| 久九九九九九九九热| 欧美色图在线视频少妇| 18禁久极品美女久久哦哟呀!| 丝袜性亚洲| 欧美综合色站| 亚州成人a∨| 亚洲精品一区二区三区新线路| 嗯嗯啊中文字幕| 屌色在线97视频| 欧美日韩成人在线| 91色婷婷综合久久中文字幕二区| 丰满熟女一区二区三区在线播放| 无码人妻精品一区二区中文| 欧美巨大性舒爽顶到了| 亚洲综合九九| 亚洲超碰97| AAAA级日本片免费视频| 日日摸天天爽夜夜欢| 亚洲在线欧美| 亚洲综合第一页| 亚洲一区二区三区春色| 色吧5亚洲| 国产婷婷综合在线观看| 乱伦熟妇一区二区| 欧美一区二区三区四区综合| 国产成人精品必看| AAAAAAAAA黄片| 亚洲午夜福利视频| 99精品在线| 美女超碰978| 午夜天堂网| 品亲网欧美品亲网|