精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

六講貫通C++圖的應用之五 最短路徑

開發 后端
圖的應用恐怕是C++所有數據結構中最寬泛的了,本次六講筆者從基本儲存方法、DFS和BFS、無向圖、最小生成樹、最短路徑以及活動網絡(AOV、AOE)六個方面詳細介紹圖的應用。本文是這次系列文章的第五篇,主要介紹最短路徑。

  筆者從基本儲存方法、DFS和BFS無向圖最小生成樹、最短路徑以及活動網絡(AOV、AOE)六個方面詳細介紹C++圖的應用。之前我們已經介紹過了基本儲存方法、DFS和BFS、無向圖以及最小生成樹,今天我們介紹最短路徑

  最短路徑

  最短路徑恐怕是圖的各種算法中最能吸引初學者眼球的了——在地圖上找一條最短的路或許每個人都曾經嘗試過。下面我們用計算機來完成我們曾經的“愿望”。

  在圖的算法中有個有趣的現象,就是問題的規模越大,算法就越簡單。圖是個復雜的結構,對于一個特定問題,求解特定頂點的結果都會受到其他頂點的影響——就好比一堆互相碰撞的球體,要求解特定球體的狀態,就必須考慮其他球體的狀態。既然每個頂點都要掃描,如果對所有的頂點都求解,那么算法就非常的簡單——無非是遍歷嗎。然而,當我們降低問題規模,那很自然的,我們希望算法的規模也降低——如果不降低,不是殺雞用牛刀?但是,正是由于圖的復雜性,使得這種降低不容易達到,因此,為了降低算法的規模,使得算法就復雜了。

  在下面的介紹中,清楚了印證了上面的結論。人的認知過程是從簡單到復雜,雖然表面看上去,求每對頂點之間的最短路徑要比特定頂點到其他頂點之間的最短路徑復雜,但是,就像上面說的,本質上,前者更為簡單。下面的介紹沒有考慮歷史因素(就是指哪個算法先提出來),也沒有考慮算法提出者的真實想法(究竟是誰參考了或是沒參考誰),只是從算法本身之間的聯系來做一個闡述,如有疏漏,敬請原諒。

  準備工作

  一路走下來,圖類已經很“臃腫”了,為了更清晰的說明問題,需要“重起爐灶另開張”,同時也是為了使算法和儲存方法分開,以便于復用。

  首先要為基本圖類添加幾個接口。

  1. template <class name, class dist, class mem>  
  2. class Network  
  3. {  
  4. public:  
  5. int find(const name& v) { int n; if (!data.find(v, n)) return -1; return n; }  
  6. dist& getE(int m, int n) { return data.getE(m, n); }  
  7. const dist& NoEdge() { return data.NoEdge; }  
  8. };  
  9. template <class name, class dist>  
  10. class AdjMatrix  
  11. {  
  12. public:  
  13. dist& getE(int m, int n) { return edge[m][n]; }  
  14. };  
  15. template <class name, class dist>  
  16. class Link  
  17. {  
  18. public:  
  19. dist& getE(int m, int n)  
  20. {  
  21. for (list::iterator iter = vertices[m].e->begin();  
  22. iter != vertices[m].e->end() && iter->vID < n; iter++);  
  23. if (iter == vertices[m].e->end()) return NoEdge;  
  24. if (iter->vID == n) return iter->cost;  
  25. return NoEdge;  
  26. }  
  27. }; 

  然后就是為了最短路徑算法“量身定做”的“算法類”。求某個圖的最短路徑時,將圖綁定到算法上,例如這樣:

  1. Network<charint, Link<charint> > a(100);  
  2. //插入點、邊……  
  3. Weight<charint, Link<charint> > b(&a);  
  4.  
  5. #include "Network.h"  
  6. template <class name, class dist, class mem>  
  7. class Weight  
  8. {  
  9. public:  
  10. Weight(Network* G) : G(G), all(false), N(G->vNum())  
  11. {  
  12. length = new dist*[N]; path = new int*[N];  
  13. shortest = new bool[N]; int i, j;  
  14. for (i = 0; i < N; i++)  
  15. {  
  16. length[i] = new dist[N]; path[i] = new int[N];  
  17. }  
  18. for (i = 0; i < N; i++)  
  19. {  
  20. shortest[i] = false;  
  21. for (j = 0; j < N; j++)  
  22. {  
  23. length[i][j] = G->getE(i, j);  
  24. if (length[i][j] != G->NoEdge()) path[i][j] = i;  
  25. else path[i][j] = -1;  
  26. }  
  27. }  
  28. }  
  29. ~Weight()  
  30. {  
  31. for (int i = 0; i < N; i++) { delete []length[i]; delete []path[i]; }  
  32. delete []length; delete []path; delete []shortest;  
  33. }  
  34. private:  
  35. void print(int i, int j)  
  36. {  
  37. if (path[i][j] == -1) cout << "No Path" << endl; return;  
  38. cout << "Shortest Path: "; out(i, j); cout << G->getV(j) << endl;  
  39. cout << "Path Length: " << length[i][j] << endl;  
  40. }  
  41. void out(int i, int j)  
  42. {  
  43. if (path[i][j] != i) out(i, path[i][j]);  
  44. cout << G->getV(path[i][j]) << "->";  
  45. }  
  46. dist** length; int** path; bool* shortest; bool all; int N;  
  47. Network* G;  
  48. }; 

  發現有了構造函數真好,算法的結果數組的初始化和算法本身分開了,這樣一來,算法的基本步驟就很容易看清楚了。

#p#

  所有頂點之間的最短路徑(Floyed算法)

  從v1到v2的路徑要么是v1->v2,要么中間經過了若干頂點。顯然我們要求的是這些路徑中最短的一條。這樣一來,問題就很好解決了——最初都是源點到目的點,然后依次添加頂點,使得路徑逐漸縮短,頂點都添加完了,算法就結束了。

  1. void AllShortestPath()//Folyed  
  2. {  
  3. if (all) return;  
  4. for (int k = 0; k < N; k++)  
  5. {  
  6. shortest[k] = true;  
  7. for (int i = 0; i < N; i++)  
  8. for (int j = 0; j < N; j++)  
  9. if (length[i][k] + length[k][j] < length[i][j])  
  10. {  
  11. length[i][j] = length[i][k] + length[k][j];  
  12. path[i][j] = path[k][j];  
  13. }  
  14. }  
  15. all = true;  

  單源最短路徑(Dijkstra算法)

  仿照上面的Floyed算法,很容易的,我們能得出下面的算法:

  1. void ShortestPath(int v1)  
  2. {  
  3. //Bellman-Ford  
  4. for (int k = 2; k < N; k++)  
  5. for (int i = 0; i < N; i++)  
  6. for (int j = 0; j < N; j++)  
  7. if (length[v1][j] + length[j][i] < length[v1][i])  
  8. {  
  9. length[v1][i] = length[v1][j] + length[j][i];  
  10. path[v1][i] = j;  
  11. }  

  這就是Bellman-Ford算法,可以看到,采用Floyed算法的思想,不能使算法的時間復雜度從O(n3)降到預期的O(n2),只是空間復雜度從O(n2)降到了O(n),但這也是應該的,因為只需要原來結果數組中的一行。因此,我并不覺得這個算法是解決“邊上權值為任意值的單源最短路徑問題”而專門提出來的,是Dijkstra算法的“推廣”版本,他只是Floyed算法的退化版本。

  顯然,Floyed算法是經過N次N2條邊迭代而產生最短路徑的;如果我們想把時間復雜度從O(n3) 降到預期的O(n2),就必須把N次迭代的N2條邊變為N條邊,也就是說每次參與迭代的只有一條邊——問題是如何找到這條邊。

  先看看邊的權值非負的情況。假設從頂點0出發,到各個頂點的距離是a1,a2……,那么,這其中的最短距離an必定是從0到n號頂點的最短距離。這是因為,如果an不是從0到n號頂點的最短距離,那么必然是中間經過了某個頂點;但現在邊的權值非負,一個比現在這條邊還長的邊再加上另一條非負的邊,是不可能比這條邊短的。從這個原理出發,就能得出Dijkstra算法,注意,這個和Prim算法極其相似,不知道誰參考了誰;但這也是難免的事情,因為他們的原理是一樣的。

  1. void ShortestPath(const name& vex1, const name& vex2)//Dijkstra  
  2. {  
  3. int v1 = G->find(vex1); int v2 = G->find(vex2);  
  4. if (shortest[v1]) { print(v1, v2); return; }  
  5. bool* S = new bool[N]; int i, j, k;  
  6. for (i = 0; i < N; i++) S[i] = false; S[v1] = true;  
  7. for (i = 0; i < N - 1; i++)//Dijkstra Start, like Prim?  
  8. {  
  9. for (j = 0, k = v1; j < N; j++)  
  10. if (!S[j] && length[v1][j] < length[v1][k]) k = j;  
  11. S[k] = true;  
  12. for (j = 0; j < N; j++)  
  13. if (!S[j] && length[v1][k] + length[k][j] < length[v1][j])  
  14. {  
  15. length[v1][j] = length[v1][k] + length[k][j];  
  16. path[v1][j] = k;  
  17. }  
  18. }  
  19. shortest[v1] = true; print(v1, v2);  

  如果邊的權值有負值,那么上面的原則不再適用,連帶的,Dijkstra算法也就不再適用了。這時候,沒辦法,只有接受O(n3) Bellman-Ford算法了,雖然他可以降低為O(n*e)。不過,何必讓邊的權值為負值呢?還是那句話,合理的并不好用。

  特定兩個頂點之間的最短路徑(A*算法)

  其實這才是我們最關心的問題,我們只是想知道從甲地到乙地怎么走最近,并不想知道別的——甲地到丙地怎么走關我什么事?自然的,我們希望這個算法的時間復雜度為O(n),但是,正像從Floyed算法到Dijkstra算法的變化一樣,并不是很容易達到這個目標的。

  讓我們先來看看Dijkstra算法求特定兩個頂點之間的最短路徑的時間復雜度究竟是多少。顯然,在上面的void ShortestPath(const name& vex1, const name& vex2)中,當S[v2]==true時,算法就可以中止了。假設兩個頂點之間直接的路徑是他們之間的路徑最短的(不需要經過其他中間頂點),并且這個路徑長度是源點到所有目的點的最短路徑中最短的,那么***次迭代的時候,就可以得到結果了。也就是說是O(n)。然而當兩個頂點的最短路徑需要經過其他頂點,或者路徑長度不是源點到未求出最短路徑的目的點的最短路徑中最短的,那就要再進行若干次迭代,對應的,時間復雜度就變為O(2n)、O(3n)……到了***才求出來(迭代了N-1次)的就是O(n2)。

  很明顯的,迭代次數是有下限的,最短路徑上要經過多少個頂點,至少就要迭代多少次,我們只能使得最終的迭代次數接近最少需要的次數。如果再要減低算法的時間復雜度,我們只能想辦法把搜索范圍的O(n)變為O(1),這樣,即使迭代了N-1次才得到結果,那時間復雜度仍為O(n)。但這個想法實現起來卻是困難重重。

  仍然看Dijkstra算法,***步要尋找S中的頂點到S外面頂點中最短的一條路徑,這個min運算使用基于比較的方法的時間復雜度下限是O(longN)(使用敗者樹),然后需要掃描結果數組的每個分量進行修改,這里的時間復雜度就只能是O(n)了。原始的Dijkstra算法達不到預期的目的。

  現在讓我們給圖添加一個附加條件——兩點之間直線最短,就是說如果v1和v2之間有直通的路徑(不經過其他頂點),那么這條路徑就是他們之間的最短路徑。這樣一來,如果求的是v1能夠直接到達的頂點的最短路徑,時間復雜度就是O(1)了,顯然比原來***的O(n)(這里實際上是O(logN))提高了效率。

  這個變化的產生,是因為我們添加了“兩點之間直線最短”這樣的附加條件,實際上就是引入一個判斷準則,把原來盲目的O(n)搜索降到了O(1)。這個思想就是A*算法的思想。關于A*算法更深入的介紹,恕本人資料有限,不能滿足大家了。有興趣的可以到網上查查,這方面的中文資料實在太少了,大家做好看E文的準備吧。

  不同于現有的教科書,我把求最短路徑的算法的介紹順序改成了上面的樣子。我認為這個順序才真正反映了問題的本質——當減低問題規模時,為了降低算法的時間復雜度,應該想辦法縮小搜索范圍。而縮小搜索范圍,都用到了一個思想——盡可能的向接近***結果的方向搜索,這就是貪婪算法的應用。

  如果反向看一遍算法的演化,我們還能得出新的結論。Dijkstra算法實際上不用做n2次搜索、比較和修改,當求出最短路徑的頂點后,搜索范圍已經被縮小了,只是限于儲存結構,這種范圍的縮小并沒有體現出來。如果我們使得這種范圍縮小直接體現出來,那么,用n次Dijkstra算法代替Floyed算法就能帶來效率上的提升。A*算法也是如此,如果用求n點的A*算法來代替Dijkstra算法,也能帶來效率的提升。

  但是,每一步的進化實際上都伴隨著附加條件的引入。從Floyed到Dijkstra是邊上的權值非負,如果這個條件不成立,那么就只能退化成Bellman-Ford算法。從Dijkstra到A*是另外的判斷準則的引入(本文中是兩點之間直線最短),如果這個條件不成立,同樣的,只能采用不完整的Dijkstra(求到目的頂點結束算法)。

【編輯推薦】

  1. 經典四講貫通C++排序之一 插入排序
  2. c++編程常用工具
  3. 給C++初學者的50個忠告
  4. C++獲取當前路徑實現技巧分享
  5. 程序員必看 c++筆試題匯總
責任編輯:韓亞珊 來源: 天極網
相關推薦

2011-04-11 16:43:51

AOVAOE活動網絡

2011-04-11 16:10:55

無向圖C++

2011-04-11 16:19:56

C++

2011-04-11 15:57:22

DFSBFSC++

2011-04-11 15:53:40

C++

2021-08-26 17:36:42

Floyd算法數據結構

2015-07-16 14:25:56

SDN網絡感知服務

2011-04-11 14:52:18

選擇排序排序C++

2011-04-11 14:21:43

希爾排序排序C++

2015-12-07 17:07:36

SDN網絡流量

2011-05-17 13:58:37

最短路徑

2011-04-11 13:41:34

插入排序排序C++

2011-04-11 14:29:44

交換排序冒泡排序排序

2021-05-10 08:07:40

圖算法路徑頂點

2024-05-24 08:00:00

2021-09-08 10:32:29

微服務容器化Serverless

2013-04-23 09:31:52

SQL Server

2011-06-01 09:27:00

OSPF路由路由器

2010-01-14 09:27:44

C++語言

2011-12-19 12:39:37

Java
點贊
收藏

51CTO技術棧公眾號

成年人免费在线视频| 99精品久久久久| av有声小说一区二区三区| 国产女主播在线一区二区| 成人乱色短篇合集| 国产在线成人精品午夜| 丝袜久久网站| 亚洲人成人一区二区三区| 日本一不卡视频| 俺也去精品视频在线观看| 动漫美女无遮挡免费| 精品欧美一区二区三区在线观看 | 影音先锋人妻啪啪av资源网站| 在线能看的av网址| 亚洲人成亚洲人成在线观看图片| 国产一区二区久久久| 久久久久久av无码免费看大片| 综合激情在线| 亚洲视频在线观看免费| 4438x全国最大成人| 欧美电影网址| 亚洲成a人片综合在线| 亚洲欧洲三级| 亚州精品国产精品乱码不99按摩| 久久99这里只有精品| 欧美一区二区.| 青青草原在线免费观看视频| 精品色999| 精品视频在线播放色网色视频| 免费涩涩18网站入口| free性护士videos欧美| 亚洲人吸女人奶水| 天天爽天天狠久久久| 午夜小视频在线播放| 国产精品888| 国产欧美一区二区白浆黑人| 精品不卡一区二区| 亚洲毛片播放| 久久久久一本一区二区青青蜜月| 91传媒免费观看| 日韩啪啪电影网| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | heyzo在线播放| 亚洲精品一二三四区| 日韩精品久久一区二区三区| 色窝窝无码一区二区三区| 国产精品资源网站| 国产日韩在线免费| 中文字幕在线播放日韩| 手机精品视频在线观看| 欧美一区二区三区四区在线 | 欧美日韩国产色| 草草视频在线免费观看| 超级碰碰不卡在线视频| 亚洲一区二区在线免费观看视频| 成年人三级视频| 成人在线直播| 亚洲丝袜美腿综合| 中国一级黄色录像| www在线免费观看视频| 亚洲日本在线视频观看| 国产精品12p| 成人黄色在线电影| 一区二区三区四区在线| 黄色a级片免费看| 国产蜜臀一区二区打屁股调教| 一区二区三区精密机械公司| 高清无码视频直接看| 欧美大胆的人体xxxx| 亚洲成人中文在线| 日本国产在线播放| 黑人巨大精品| 欧洲精品视频在线观看| 中文字幕国内自拍| 不卡一区视频| 精品一区二区在线观看| 自拍av一区二区三区| 欧美人与性禽动交精品| 韩日视频在线| 亚洲欧洲美洲综合色网| 国产在线视频在线| 超碰aⅴ人人做人人爽欧美| 一本色道久久综合亚洲精品按摩| 三级视频中文字幕| 亚洲精品在线a| 亚洲男女自偷自拍图片另类| 美国一级黄色录像| 亚洲欧美文学| 日本午夜精品理论片a级appf发布| 亚洲精品91天天久久人人| 久久成人精品无人区| 超碰97国产在线| 蜜桃视频在线观看视频| 中文字幕五月欧美| www.av片| 欧美97人人模人人爽人人喊视频| 日韩欧美你懂的| 日本少妇高潮喷水xxxxxxx| 久久久久美女| 日韩av不卡电影| 国产色综合视频| 91香蕉视频mp4| 中国 免费 av| 韩国成人动漫| 欧美videos大乳护士334| 国产三级av在线播放| 午夜日韩视频| 国产精品女人网站| 男人天堂综合网| 国产精品不卡在线| 国产精品宾馆在线精品酒店| 国产精品久久久久久久久久辛辛| 日韩av综合网| 欧美日韩亚洲国产另类| 日日夜夜免费精品视频| 成人欧美一区二区| 午夜视频在线| 日本韩国欧美在线| 亚洲熟女一区二区| 一区二区影院| 国产精品成人国产乱一区| 风流老熟女一区二区三区| 国产精品久久影院| 精品国产91久久久久久老师| 日韩中文在线字幕| 精品日韩视频| 日韩国产欧美区| 青娱乐在线视频免费观看| 秋霞成人午夜伦在线观看| 精品高清视频| 黑人玩欧美人三根一起进| 欧美群妇大交群中文字幕| 最新中文字幕视频| 亚洲日本黄色| 国产精品日韩高清| 在线播放蜜桃麻豆| 91精品久久久久久久久99蜜臂| 亚洲av无码国产精品麻豆天美| 亚洲人成久久| 狠狠干一区二区| 久操av在线| 欧美大肚乱孕交hd孕妇| 日本妇女毛茸茸| 久久se精品一区二区| 亚洲欧洲一区二区福利| 精品视频在线一区二区在线| 亚洲人成网站色ww在线| 精品免费囯产一区二区三区| 91丨九色porny丨蝌蚪| 国产极品在线视频| 欧美大胆视频| 欧美孕妇性xx| 国产爆初菊在线观看免费视频网站| 日韩欧美在线免费| 91久久免费视频| 日韩国产一区二| 亚洲高清在线播放| 亚洲免费一区| 超碰日本道色综合久久综合| av网站在线免费看| 亚洲成人资源网| 偷拍女澡堂一区二区三区| 久久经典综合| 日韩精品久久久免费观看| 国产福利91精品一区二区| 日韩亚洲欧美中文高清在线| 国产精品丝袜黑色高跟鞋| 亚洲久草在线视频| 成人区人妻精品一区二| 国产亚洲欧洲| 亚洲免费精品视频| 日韩综合一区二区三区| 午夜精品一区二区三区av| 欧洲亚洲精品视频| 国产鲁鲁视频在线观看免费| 亚洲精品欧美在线| 妖精视频一区二区| 蘑菇福利视频一区播放| 先锋影音网一区| 在线精品自拍| 日韩av毛片网| 免费超碰在线| 亚洲国产欧美一区二区三区同亚洲 | 午夜精品久久17c| 伦理片一区二区三区| 青青操免费在线视频| 国产欧美精品国产国产专区| 妖精视频在线观看| 久久九九国产| 中文字幕精品在线播放| 亚洲aa在线| 91九色单男在线观看| 性欧美freesex顶级少妇| 日韩在线欧美在线| 人人妻人人玩人人澡人人爽| 欧美亚洲国产一区在线观看网站| 国产免费无码一区二区视频 | 久久噜噜色综合一区二区| 国产精品69毛片高清亚洲| 各处沟厕大尺度偷拍女厕嘘嘘| 大片网站久久| 国产一区二区三区高清| 欧美日韩视频免费看| 久久男人资源视频| 欧洲不卡视频| 精品亚洲精品福利线在观看| 国产理论片在线观看| 日韩欧美精品中文字幕| 欧美卡一卡二卡三| 国产精品入口麻豆九色| 国产一级免费片| 国产最新精品免费| www.日日操| 亚洲人体大胆视频| 欧美做受777cos| 久久国产成人精品| 免费日韩电影在线观看| 天堂va在线高清一区| 国产女精品视频网站免费| 亚洲人体视频| 国内成人精品视频| 宅男网站在线免费观看| 中文字幕视频一区二区在线有码| 亚洲精品乱码久久久久久自慰| 精品123区| 国产91精品不卡视频| 在线看福利影| 久久黄色av网站| 天堂а√在线资源在线| 亚洲偷欧美偷国内偷| 性xxxxbbbb| 亚洲国产精品一区二区久| 性生活免费网站| 欧美高清性hdvideosex| 最近中文字幕免费观看| 色综合天天狠狠| 国产农村妇女aaaaa视频| 亚洲成人一区二区在线观看| 九九免费精品视频| 亚洲欧美经典视频| 久久噜噜色综合一区二区| 中文字幕在线不卡| 亚洲综合图片一区| 亚洲欧洲在线观看av| 国产三级aaa| 国产精品久久久久久亚洲毛片| 亚洲精品午夜视频| 久久久精品综合| 精品欧美一区二区久久久| 久久精品夜色噜噜亚洲a∨| 亚洲综合色一区| 中文字幕国产一区| 少妇视频一区二区| 亚洲欧美区自拍先锋| 一级黄色录像视频| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品久久久久久免费播放 | 亚洲黄色在线播放| 欧美成人官网二区| 欧美 日韩 国产 在线| 亚洲激情在线视频| 麻豆app在线观看| 最近2019年手机中文字幕| 老司机在线永久免费观看| 久久精品99久久久久久久久| av网址在线| 久久久久久成人精品| 国产精品蜜芽在线观看| 26uuu亚洲国产精品| 亚洲日本在线观看视频| 91久久精品美女高潮| 97久久综合精品久久久综合| 国产一区自拍视频| 精品国产乱码| 超碰97在线看| 国产欧美一区二区三区国产幕精品| 成人毛片视频网站| 奇米四色…亚洲| 精品国一区二区三区| 中文字幕无码日韩专区免费 | 欧美色网在线| 成人精品福利视频| 都市激情亚洲欧美| 日本精品一区二区三区不卡无字幕 | 日韩精品一区二区三区在线播放| 无码国产精品高潮久久99| 国产一区二区三区视频在线观看| 国产在线更新| 97成人在线视频| 日本久久久久| 精品国产中文字幕| 色婷婷综合网| 黄色国产一级视频| 美国一区二区三区在线播放| 美国黄色一级视频| 国产精品嫩草影院com| 国产第一页在线播放| 欧美最猛性xxxxx直播| 亚洲精品一区二区三区四区| 中文字幕9999| 久草免费在线视频| 91欧美精品成人综合在线观看| 日韩精品免费一区二区三区竹菊| 亚洲人成77777| 国产伦理一区| 亚洲成人福利视频| 中文字幕免费观看一区| 久久久久99精品| 欧美高清精品3d| 激情小说 在线视频| 欧美黄色成人网| 国产精品99| 欧美13一14另类| 亚洲午夜激情在线| 不卡的在线视频| 久久久国产一区二区三区四区小说| 欧美日韩亚洲国产另类| 欧美军同video69gay| 欧美69xxxxx| 午夜精品福利电影| 综合中文字幕| 喜爱夜蒲2在线| 久久成人免费日本黄色| 精品人妻一区二区三区四区| 精品久久久久久亚洲国产300 | 日韩av在线播| 欧美一级欧美三级在线观看| 成人在线观看一区| 日本欧美国产在线| 欧美日韩导航| 99色这里只有精品| 丁香激情综合国产| 国产乱国产乱老熟300| 欧美精品高清视频| 日韩精品毛片| 国产日韩欧美在线| 日韩在线观看一区| 欧美精品99久久久**| 国产又大又粗又长| 爽爽爽爽爽爽爽成人免费观看| 成人黄色免费短视频| 欧美高清视频一区| 新狼窝色av性久久久久久| 国产熟女高潮一区二区三区| 亚洲第一福利一区| 色偷偷在线观看| 欧美在线免费视频| 女人丝袜激情亚洲| 免费黄色一级网站| 国产女人18毛片水真多成人如厕| 精人妻无码一区二区三区| 亚洲天堂av在线免费| 在线一区视频观看| 尤物国产精品| 国产一区二区三区四区在线观看| 翔田千里88av中文字幕| 日韩亚洲欧美成人一区| 在线网址91| 国产免费一区| 亚洲深夜福利| 国产中年熟女高潮大集合| 91成人在线观看喷潮| a天堂中文在线88| 成人免费观看网址| 国产精品videossex久久发布| 一本色道久久hezyo无码| 精品欧美一区二区三区| 蜜桃免费在线| 成人免费自拍视频| 国内精品久久久久久久97牛牛| yjizz视频| 在线影视一区二区三区| 日韩子在线观看| 999在线观看免费大全电视剧| 影音先锋亚洲一区| 久久久亚洲av波多野结衣| 欧美日精品一区视频| av免费看在线| 精品久久久久久综合日本| 日韩国产在线观看一区| 国产探花在线免费观看| 亚洲国产成人精品久久| 久久久久久久| 欧美性视频在线播放| 成人免费毛片片v| aaa在线视频| 欧美精品午夜视频| 国产成人三级| 亚洲911精品成人18网站| 岛国av在线不卡| 巨大荫蒂视频欧美另类大| 国产精品一区二区av| 青娱乐精品视频| 久久久久国产精品夜夜夜夜夜| 亚洲精品中文字幕有码专区| 外国成人毛片| 国产男女在线观看| 亚洲人成人一区二区在线观看| 十九岁完整版在线观看好看云免费| 91精品国产自产在线|