日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

A* 算法讲解

發布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 A* 算法讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在看下面這篇文章之前,先介紹幾個理論知識,有助于理解A*算法。

啟發式搜索:啟發式搜索就是在狀態空間中的搜索對每一個搜索的位置進行評估,得到最好的位置,再從這個位置進行搜索直到目標。這樣可以省略大量無畏的搜索路徑,提到了效率。在啟發式搜索中,對位置的估價是十分重要的。采用了不同的估價可以有不同的效果。

估價函數:從當前節點移動到目標節點的預估費用;這個估計就是啟發式的。在尋路問題和迷宮問題中,我們通常用曼哈頓(manhattan)估價函數(下文有介紹)預估費用。

A*算法與BFS:可以這樣說,BFS是A*算法的一個特例。對于一個BFS算法,從當前節點擴展出來的每一個節點(如果沒有被訪問過的話)都要放進隊列進行進一步擴展。也就是說BFS的估計函數h永遠等于0,沒有一點啟發式的信息,可以認為BFS是“最爛的”A*算法。(注解:不一定是0,讀者只要認為是“相同的”就可以了)

選取最小估價:如果學過數據結構的話,應該可以知道,對于每次都要選取最小估價的節點,應該用到最小優先級隊列(也叫最小二叉堆)。在C++的STL里有現成的數據結構priority_queue,可以直接使用。當然不要忘了重載自定義節點的比較操作符。

A*算法的特點:A*算法在理論上是時間最優的,但是也有缺點:它的空間增長是指數級別的。

IDA*算法:這種算法被稱為迭代加深A*算法,可以有效的解決A*空間增長帶來的問題,甚至可以不用到優先級隊列。如果要知道詳細:google一下。


?

A*尋路初探(轉載)

?

作者:Patrick Lester

譯者:Panic2005年

部分修正:chx

?

  譯者序:很久以前就知道了A*算法,但是從未認真讀過相關的文章,也沒有看過代碼,只是腦子里有個模糊的概念。這次決定從頭開始,研究一下這個被人推崇備至的簡單方法,作為學習人工智能的開始。

  這篇文章非常知名,國內應該有不少人翻譯過它,我沒有查找,覺得翻譯本身也是對自身英文水平的鍛煉。經過努力,終于完成了文檔,也明白的A*算法的原理。毫無疑問,作者用形象的描述,簡潔詼諧的語言由淺入深的講述了這一神奇的算法,相信每個讀過的人都會對此有所認識(如果沒有,那就是偶的翻譯太差了--b)。

  現在是年月日的版本,應原作者要求,對文中的某些算法細節做了修改。

  原文鏈接:http://www.gamedev.net/reference/articles/article2003.asp

  原作者文章鏈接:http://www.policyalmanac.org/games/aStarTutorial.htm

以下是翻譯的正文

  會者不難,A*(念作A星)算法對初學者來說的確有些難度。這篇文章并不試圖對這個話題作權威的陳述。取而代之的是,它只是描述算法的原理,使你可以在進一步的閱讀中理解其他相關的資料。最后,這篇文章沒有程序細節。你盡可以用任意的計算機程序語言實現它。如你所愿,我在文章的末尾包含了一個指向例子程序的鏈接。壓縮包包括C++和Blitz Basic兩個語言的版本,如果你只是想看看它的運行效果,里面還包含了可執行文件。我們正在提高自己。讓我們從頭開始。。。

?

序:搜索區域

假設有人想從A點移動到一墻之隔的B點,如下圖,綠色的是起點A,紅色是終點B,藍色方塊是中間的墻。

[圖-1]

  你首先注意到,搜索區域被我們劃分成了方形網格。像這樣,簡化搜索區域,是尋路的第一步。這一方法把搜索區域簡化成了一個二維數組。數組的每一個元素是網格的一個方塊,方塊被標記為可通過的和不可通過的。路徑被描述為從A到B我們經過的方塊的集合。一旦路徑被找到,我們的人就從一個方格的中心走向另一個,直到到達目的地。

  這些中點被稱為“節點”。當你閱讀其他的尋路資料時,你將經常會看到人們討論節點。為什么不把他們描述為方格呢?因為有可能你的路徑被分割成其他不是方格的結構。他們完全可以是矩形,六角形,或者其他任意形狀。節點能夠被放置在形狀的任意位置-可以在中心,或者沿著邊界,或其他什么地方。我們使用這種系統,無論如何,因為它是最簡單的。

開始搜索

  正如我們處理上圖網格的方法,一旦搜索區域被轉化為容易處理的節點,下一步就是去引導一次找到最短路徑的搜索。在A*尋路算法中,我們通過從點A開始,檢查相鄰方格的方式,向外擴展直到找到目標。

我們做如下操作開始搜索:

???1,從點A開始,并且把它作為待處理點存入一個“開啟列表”。開啟列表就像一張購物清單。盡管現在列表里只有一個元素,但以后就會多起來。你的路徑可能會通過它包含的方格,也可能不會。基本上,這是一個待檢查方格的列表。

???2,尋找起點周圍所有可到達或者可通過的方格,跳過有墻,水,或其他無法通過地形的方格。也把他們加入開啟列表。為所有這些方格保存點A作為“父方格”。當我們想描述路徑的時候,父方格的資料是十分重要的。后面會解釋它的具體用途。

???3,從開啟列表中刪除點A,把它加入到一個“關閉列表”,列表中保存所有不需要再次檢查的方格。在這一點,你應該形成如圖的結構。在圖中,暗綠色方格是你起始方格的中心。它被用淺藍色描邊,以表示它被加入到關閉列表中了。所有的相鄰格現在都在開啟列表中,它們被用淺綠色描邊。每個方格都有一個灰色指針反指他們的父方格,也就是開始的方格。

[圖-2]

接著,我們選擇開啟列表中的臨近方格,大致重復前面的過程,如下。但是,哪個方格是我們要選擇的呢?是那個F值最低的。

路徑評分

選擇路徑中經過哪個方格的關鍵是下面這個等式:F = G + H

這里:

????* G =?從起點A,沿著產生的路徑,移動到網格上指定方格的移動耗費。

????* H =?從網格上那個方格移動到終點B的預估移動耗費。這經常被稱為啟發式的,可能會讓你有點迷惑。這樣叫的原因是因為它只是個猜測。我們沒辦法事先知道路徑的長度,因為路上可能存在各種障礙(墻,水,等等)。雖然本文只提供了一種計算H的方法,但是你可以在網上找到很多其他的方法。

我們的路徑是通過反復遍歷開啟列表并且選擇具有最低F值的方格來生成的。文章將對這個過程做更詳細的描述。首先,我們更深入的看看如何計算這個方程。

正如上面所說,G表示沿路徑從起點到當前點的移動耗費。在這個例子里,我們令水平或者垂直移動的耗費為10,對角線方向耗費為14。我們取這些值是因為沿對角線的距離是沿水平或垂直移動耗費的的根號2,或者約.414倍。為了簡化,我們用和近似。比例基本正確,同時我們避免了求根運算和小數。這不是只因為我們怕麻煩或者不喜歡數學。使用這樣的整數對計算機來說也更快捷。你不就就會發現,如果你不使用這些簡化方法,尋路會變得很慢。

既然我們在計算沿特定路徑通往某個方格的G值,求值的方法就是取它父節點的G值,然后依照它相對父節點是對角線方向或者直角方向(非對角線),分別增加和。例子中這個方法的需求會變得更多,因為我們從起點方格以外獲取了不止一個方格。

H值可以用不同的方法估算。我們這里使用的方法被稱為曼哈頓方法,它計算從當前格到目的格之間水平和垂直的方格的數量總和,忽略對角線方向,然后把結果乘以10。這被稱為曼哈頓方法是因為它看起來像計算城市中從一個地方到另外一個地方的街區數,在那里你不能沿對角線方向穿過街區。很重要的一點,我們忽略了一切障礙物。這是對剩余距離的一個估算,而非實際值,這也是這一方法被稱為啟發式的原因。想知道更多?你可以在這里找到方程和額外的注解。

F的值是G和H的和。第一步搜索的結果可以在下面的圖表中看到。F,G和H的評分被寫在每個方格里。正如在緊挨起始格右側的方格所表示的,F被打印在左上角,G在左下角,H則在右下角。

[圖-3]

現在我們來看看這些方格。寫字母的方格里,G = 10。這是因為它只在水平方向偏離起始格一個格距。緊鄰起始格的上方,下方和左邊的方格的G值都等于10。對角線方向的G值是14。

H值通過求解到紅色目標格的曼哈頓距離得到,其中只在水平和垂直方向移動,并且忽略中間的墻。用這種方法,起點右側緊鄰的方格離紅色方格有格距離,H值就是30。這塊方格上方的方格有格距離(記住,只能在水平和垂直方向移動),H值是40。你大致應該知道如何計算其他方格的H值了~。每個格子的F值,還是簡單的由G和H相加得到

繼續搜索

為了繼續搜索,我們簡單的從開啟列表中選擇F值最低的方格。然后,對選中的方格做如下處理:

???4,把它從開啟列表中刪除,然后添加到關閉列表中。

???5,檢查所有相鄰格子。跳過那些已經在關閉列表中的或者不可通過的(有墻,水的地形,或者其他無法通過的地形),把他們添加進開啟列表,如果他們還不在里面的話。把選中的方格作為新的方格的父節點。

???6,如果某個相鄰格已經在開啟列表里了,檢查現在的這條路徑是否更好。換句話說,檢查如果我們用新的路徑到達它的話,G值是否會更低一些。如果不是,那就什么都不做。

??????另一方面,如果新的G值更低,那就把相鄰方格的父節點改為目前選中的方格(在上面的圖表中,把箭頭的方向改為指向這個方格)。最后,重新計算F和G的值。如果這看起來不夠清晰,你可以看下面的圖示。

  好了,讓我們看看它是怎么運作的。我們最初的格方格中,在起點被切換到關閉列表中后,還剩格留在開啟列表中。這里面,F值最低的那個是起始格右側緊鄰的格子,它的F值是40。因此我們選擇這一格作為下一個要處理的方格。在緊隨的圖中,它被用藍色突出顯示。

[圖-4]

  首先,我們把它從開啟列表中取出,放入關閉列表(這就是他被藍色突出顯示的原因)。然后我們檢查相鄰的格子。哦,右側的格子是墻,所以我們略過。左側的格子是起始格。它在關閉列表里,所以我們也跳過它。

  其他格已經在開啟列表里了,于是我們檢查G值來判定,如果通過這一格到達那里,路徑是否更好。我們來看選中格子下面的方格。它的G值是。如果我們從當前格移動到那里,G值就會等于(到達當前格的G值是,移動到上面的格子將使得G值增加)。因為G值大于,所以這不是更好的路徑。如果你看圖,就能理解。與其通過先水平移動一格,再垂直移動一格,還不如直接沿對角線方向移動一格來得簡單。

  當我們對已經存在于開啟列表中的個臨近格重復這一過程的時候,我們發現沒有一條路徑可以通過使用當前格子得到改善,所以我們不做任何改變。既然我們已經檢查過了所有鄰近格,那么就可以移動到下一格了。

  于是我們檢索開啟列表,現在里面只有7格了,我們仍然選擇其中F值最低的。有趣的是,這次,有兩個格子的數值都是54。我們如何選擇?這并不麻煩。從速度上考慮,選擇最后添加進列表的格子會更快捷。這種導致了尋路過程中,在靠近目標的時候,優先使用新找到的格子的偏好。但這無關緊要。(對相同數值的不同對待,導致不同版本的A*算法找到等長的不同路徑)那我們就選擇起始格右下方的格子,如圖:

[圖-5]

  這次,當我們檢查相鄰格的時候,發現右側是墻,于是略過。上面一格也被略過。我們也略過了墻下面的格子。為什么呢?因為你不能在不穿越墻角的情況下直接到達那個格子。你的確需要先往下走然后到達那一格,按部就班的走過那個拐角。(注解:穿越拐角的規則是可選的。它取決于你的節點是如何放置的。)(再次注解:我認為要根據實際情況以及題目描述分析。)

  這樣一來,就剩下了其他格。當前格下面的另外兩個格子目前不在開啟列表中,于是我們添加他們,并且把當前格指定為他們的父節點。其余格,兩個已經在關閉列表中(起始格,和當前格上方的格子,在表格中藍色高亮顯示),于是我們略過它們。最后一格,在當前格的左側,將被檢查通過這條路徑,G值是否更低。不必擔心,我們已經準備好檢查開啟列表中的下一格了。

我們重復這個過程,直到目標格被添加進關閉列表(注解),就如在下面的圖中所看到的。

[圖-6]

注意,起始格下方格子(注解:是下下方的格子)的父節點已經和前面不同的。之前它的G值是88,并且指向右上方的格子。現在它的G值是80,指向它上方的格子。這在尋路過程中的某處發生,當應用新路徑時,G值經過檢查變得低了-于是父節點被重新指定,G和F值被重新計算。盡管這一變化在這個例子中并不重要,在很多場合,這種變化會導致尋路結果的巨大變化。

那么,我們怎么確定這條路徑呢?很簡單,從紅色的目標格開始,按箭頭的方向朝父節點移動。這最終會引導你回到起始格,這就是你的路徑!看起來應該像圖中那樣。從起始格A移動到目標格B只是簡單的從每個格子(節點)的中點沿路徑移動到下一個,直到你到達目標點。就這么簡單。

[圖-7]

A*方法總結

好,現在你已經看完了整個說明,讓我們把每一步的操作寫在一起:

???1,把起始格添加到開啟列表。

???2,重復如下的工作:

??????a)?尋找開啟列表中F值最低的格子。我們稱它為當前格。

??????b)?把它切換到關閉列表。

??????c)?對相鄰的格中的每一個?

??????????*?如果它不可通過或者已經在關閉列表中,略過它。反之如下。

??????????*?如果它不在開啟列表中,把它添加進去。把當前格作為這一格的父節點。記錄這一格的F,G,和H值。

??????????*?如果它已經在開啟列表中,用G值為參考檢查新的路徑是否更好。更低的G值意味著更好的路徑。如果是這樣,就把這一格的父節點改成當前格,并且重新計算這一格的G和F值。如果你保持你的開啟列表按F值排序,改變之后你可能需要重新對開啟列表排序。

??????d)?停止,當你

??????????*?把目標格添加進了關閉列表(注解),這時候路徑被找到,或者

??????????*?沒有找到目標格,開啟列表已經空了。這時候,路徑不存在。

???3.保存路徑。從目標格開始,沿著每一格的父節點移動直到回到起始格。這就是你的路徑。

?

(注解:在這篇文章的較早版本中,建議的做法是當目標格(或節點)被加入到開啟列表,而不是關閉列表的時候停止尋路。這么做會更迅速,而且幾乎總是能找到最短的路徑,但不是絕對的。當從倒數第二個節點到最后一個(目標節點)之間的移動耗費懸殊很大時-例如剛好有一條河穿越兩個節點中間,這時候舊的做法和新的做法就會有顯著不同。)

(再次注解:事實上在競賽中我們可以根據題意來追求精度或者是時間,但舍魚而取熊掌,二者基本不可兼得。)

?

題外話

  離題一下,見諒,值得一提的是,當你在網上或者相關論壇看到關于A*的不同的探討,你有時會看到一些被當作A*算法的代碼而實際上他們不是。要使用A*,你必須包含上面討論的所有元素--特定的開啟和關閉列表,用F,G和H作路徑評價。有很多其他的尋路算法,但他們并不是A*,A*被認為是他們當中最好的。Bryan Stout在這篇文章后面的參考文檔中論述了一部分,包括他們的一些優點和缺點。有時候特定的場合其他算法會更好,但你必須很明確你在作什么。好了,夠多的了。回到文章。

?

實現的注解

現在你已經明白了基本原理,寫你的程序的時候還得考慮一些額外的東西。下面這些材料中的一些引用了我用C++和Blitz Basic寫的程序,但對其他語言寫的代碼同樣有效。

1.其他單位(避免碰撞):如果你恰好看了我的例子代碼,你會發現它完全忽略了其他單位。我的尋路者事實上可以相互穿越。取決于具體的游戲,這也許可以,也許不行。如果你打算考慮其他單位,希望他們能互相繞過,我建議你只考慮靜止或那些在計算路徑時臨近當前單位的單位,把它們當前的位置標志為可通過的。對于臨近的運動著的單位,你可以通過懲罰它們各自路徑上的節點,來鼓勵這些尋路者找到不同的路徑(更多的描述見#2).

如果你選擇了把其他正在移動并且遠離當前尋路單位的那些單位考慮在內,你將需要實現一種方法及時預測在何時何地碰撞可能會發生,以便恰當的避免。否則你極有可能得到一條怪異的路徑,單位突然轉彎試圖避免和一個已經不存在的單位發生碰撞。

當然,你也需要寫一些碰撞檢測的代碼,因為無論計算的時候路徑有多完美,它也會因時間而改變。當碰撞發生時,一個單位必須尋找一條新路徑,或者,如果另一個單位正在移動并且不是正面碰撞,在繼續沿當前路徑移動之前,等待那個單位離開。

這些提示大概可以讓你開始了。如果你想了解更多,這里有些你可能會覺得有用的鏈接:

????*自治角色的指導行為:Craig Reynold在指導能力上的工作和尋路有些不同,但是它可以和尋路整合從而形成更完整的移動和碰撞檢測系統。

????*電腦游戲中的長短距指導:指導和尋路方面著作的一個有趣的考察。這是一個pdf文件。

????*協同單位移動:一個兩部分系列文章的第一篇,內容是關于編隊和基于分組的移動,作者是帝國時代(Age of Empires)的設計者Dave Pottinger.

????*實現協同移動:Dave Pottinger文章系列的第二篇。

2.?不同的地形損耗:在這個教程和我附帶的程序中,地形只能是二者之-可通過的和不可通過的。但是你可能會需要一些可通過的地形,但是移動耗費更高-沼澤,小山,地牢的樓梯,等等。這些都是可通過但是比平坦的開闊地移動耗費更高的地形。類似的,道路應該比自然地形移動耗費更低。

這個問題很容易解決,只要在計算任何地形的G值的時候增加地形損耗就可以了。簡單的給它增加一些額外的損耗就可以了。由于A*算法已經按照尋找最低耗費的路徑來設計,所以很容易處理這種情況。在我提供的這個簡單的例子里,地形只有可通過和不可通過兩種,A*會找到最短,最直接的路徑。但是在地形耗費不同的場合,耗費最低的路徑也許會包含很長的移動距離-就像沿著路繞過沼澤而不是直接穿過它。

一種需額外考慮的情況是被專家稱之為“influence mapping”的東西(暫譯為影響映射圖)。就像上面描述的不同地形耗費一樣,你可以創建一格額外的分數系統,并把它應用到尋路的AI中。假設你有一張有大批尋路者的地圖,他們都要通過某個山區。每次電腦生成一條通過那個關口的路徑,它就會變得更擁擠。如果你愿意,你可以創建一個影響映射圖對有大量屠殺事件的格子施以不利影響。這會讓計算機更傾向安全些的路徑,并且幫助它避免總是僅僅因為路徑短(但可能更危險)而持續把隊伍和尋路者送到某一特定路徑。

另一個可能得應用是懲罰周圍移動單位路徑上得節點。A*的一個底限是,當一群單位同時試圖尋路到接近的地點,這通常會導致路徑交疊。以為一個或者多個單位都試圖走相同或者近似的路徑到達目的地。對其他單位已經“認領”了的節點增加一些懲罰會有助于你在一定程度上分離路徑,降低碰撞的可能性。然而,如果有必要,不要把那些節點看成不可通過的,因為你仍然希望多個單位能夠一字縱隊通過擁擠的出口。同時,你只能懲罰那些臨近單位的路徑,而不是所有路徑,否則你就會得到奇怪的躲避行為例如單位躲避路徑上其他已經不在那里的單位。還有,你應該只懲罰路徑當前節點和隨后的節點,而不應處理已經走過并甩在身后的節點。

3.?處理未知區域:你是否玩過這樣的PC游戲,電腦總是知道哪條路是正確的,即使它還沒有偵察過地圖?對于游戲,尋路太好會顯得不真實。幸運的是,這是一格可以輕易解決的問題。

答案就是為每個不同的玩家和電腦(每個玩家,而不是每個單位--那樣的話會耗費大量的內存)創建一個獨立的“knownWalkability”數組,每個數組包含玩家已經探索過的區域,以及被當作可通過區域的其他區域,直到被證實。用這種方法,單位會在路的死端徘徊并且導致錯誤的選擇直到他們在周圍找到路。一旦地圖被探索了,尋路就像往常那樣進行。

4.?平滑路徑:盡管A*提供了最短,最低代價的路徑,它無法自動提供看起來平滑的路徑。看一下我們的例子最終形成的路徑(在圖)。最初的一步是起始格的右下方,如果這一步是直接往下的話,路徑不是會更平滑一些嗎?有幾種方法來解決這個問題。當計算路徑的時候可以對改變方向的格子施加不利影響,對G值增加額外的數值。也可以換種方法,你可以在路徑計算完之后沿著它跑一遍,找那些用相鄰格替換會讓路徑看起來更平滑的地方。想知道完整的結果,查看Toward More Realistic Pathfinding,一篇(免費,但是需要注冊)Marco Pinter發表在Gamasutra.com的文章

5.?非方形搜索區域:在我們的例子里,我們使用簡單的D方形圖。你可以不使用這種方式。你可以使用不規則形狀的區域。想想冒險棋的游戲,和游戲中那些國家。你可以設計一個像那樣的尋路關卡。為此,你可能需要建立一個國家相鄰關系的表格,和從一個國家移動到另一個的G值。你也需要估算H值的方法。其他的事情就和例子中完全一樣了。當你需要向開啟列表中添加新元素的時候,不需使用相鄰的格子,取而代之的是從表格中尋找相鄰的國家。

類似的,你可以為一張確定的地形圖創建路徑點系統,路徑點一般是路上,或者地牢通道的轉折點。作為游戲設計者,你可以預設這些路徑點。兩個路徑點被認為是相鄰的如果他們之間的直線上沒有障礙的話。在冒險棋的例子里,你可以保存這些相鄰信息在某個表格里,當需要在開啟列表中添加元素的時候使用它。然后你就可以記錄關聯的G值(可能使用兩點間的直線距離),H值(可以使用到目標點的直線距離),其他都按原先的做就可以了。Amit Patel?寫了其他方法的摘要。另一個在非方形區域搜索RPG地圖的例子,查看我的文章Two-Tiered A* Pathfinding。(譯者注:譯文:?A*分層尋路)

6.?一些速度方面的提示:當你開發你自己的A*程序,或者改寫我的,你會發現尋路占據了大量的CPU時間,尤其是在大地圖上有大量對象在尋路的時候。如果你閱讀過網上的其他材料,你會明白,即使是開發了星際爭霸或帝國時代的專家,這也無可奈何。如果你覺得尋路太過緩慢,這里有一些建議也許有效:

????*?使用更小的地圖或者更少的尋路者。

????*?不要同時給多個對象尋路。取而代之的是把他們加入一個隊列,把尋路過程分散在幾個游戲周期中。如果你的游戲以周期每秒的速度運行,沒人能察覺。但是當大量尋路者計算自己路徑的時候,他們會發覺游戲速度突然變慢。

????*?盡量使用更大的地圖網格。這降低了尋路中搜索的總網格數。如果你有志氣,你可以設計兩個或者更多尋路系統以便使用在不同場合,取決于路徑的長度。這也正是專業人士的做法,用大的區域計算長的路徑,然后在接近目標的時候切換到使用小格子/區域的精細尋路。如果你對這個觀點感興趣,查閱我的文章Two-Tiered A* Pathfinding。(譯者注:譯文:A*分層尋路)

????*?使用路徑點系統計算長路徑,或者預先計算好路徑并加入到游戲中。

????*?預處理你的地圖,表明地圖中哪些區域是不可到達的。我把這些區域稱作“孤島”。事實上,他們可以是島嶼或其他被墻壁包圍等無法到達的任意區域。A*的下限是,當你告訴它要尋找通往那些區域的路徑時,它會搜索整個地圖,直到所有可到達的方格/節點都被通過開啟列表和關閉列表的計算。這會浪費大量的CPU時間。可以通過預先確定這些區域(比如通過flood-fill或類似的方法)來避免這種情況的發生,用某些種類的數組記錄這些信息,在開始尋路前檢查它。

????*?在一個擁擠的類似迷宮的場合,把不能連通的節點看作死端。這些區域可以在地圖編輯器中預先手動指定,或者如果你有雄心壯志,開發一個自動識別這些區域的算法。給定死端的所有節點可以被賦予一個唯一的標志數字。然后你就可以在尋路過程中安全的忽略所有死端,只有當起點或者終點恰好在死端的某個節點的時候才需要考慮它們。

7.?維護開啟列表:這是A*尋路算法最重要的組成部分。每次你訪問開啟列表,你都需要尋找F值最低的方格。有幾種不同的方法實現這一點。你可以把路徑元素隨意保存,當需要尋找F值最低的元素的時候,遍歷開啟列表。這很簡單,但是太慢了,尤其是對長路徑來說。這可以通過維護一格排好序的列表來改善,每次尋找F值最低的方格只需要選取列表的首元素。當我自己實現的時候,這種方法是我的首選。

在小地圖。這種方法工作的很好,但它并不是最快的解決方案。更苛求速度的A*程序員使用叫做二叉堆的方法,這也是我在代碼中使用的方法。憑我的經驗,這種方法在大多數場合會快~倍,并且在長路經上速度呈幾何級數提升(10倍以上速度)。如果你想了解更多關于二叉堆的內容,查閱我的文章,Using Binary Heaps in A* Pathfinding。(譯者注:譯文:在A*尋路中使用二叉堆)

另一個可能的瓶頸是你在多次尋路之間清除和保存你的數據結構的方法。我個人更傾向把所有東西都存儲在數組里面。雖然節點可以以面向對象的風格被動態的產生,記錄和保存,我發現創建和刪除對象所增加的大量時間,以及多余的管理層次減慢的整個過程的速度。但是,如果你使用數組,你需要在調用之間清理數據。這中情形你想做的最后一件事就是在尋路調用之后花點時間把一切歸零,尤其是你的地圖很大的時候。

我通過使用一個叫做whichList(x,y)的二維數組避免這種開銷,數組的每個元素表明了節點在開啟列表還是在關閉列表中。嘗試尋路之后,我沒有清零這個數組。取而代之的是,我在新的尋路中重置onClosedList和onOpenList的數值,每次尋路兩個都+5或者類似其他數值。這種方法,算法可以安全的跳過前面尋路留下的臟數據。我還在數組中儲存了諸如F,G和H的值。這樣一來,我只需簡單的重寫任何已經存在的值而無需被清除數組的操作干擾。將數據存儲在多維數組中需要更多內存,所以這里需要權衡利弊。最后,你應該使用你最得心應手的方法。

8. Dijkstra的算法:盡管A*被認為是通常最好的尋路算法(看前面的“題外話”),還是有一種另外的算法有它的可取之處-Dijkstra算法。Dijkstra算法和A*本質是相同的,只有一點不同,就是Dijkstra算法沒有啟發式(H值總是)。由于沒有啟發式,它在各個方向上平均搜索。正如你所預料,由于Dijkstra算法在找到目標前通常會探索更大的區域,所以一般會比A*更慢一些。

那么為什么要使用這種算法呢?因為有時候我們并不知道目標的位置。比如說你有一個資源采集單位,需要獲取某種類型的資源若干。它可能知道幾個資源區域,但是它想去最近的那個。這種情況,Dijkstra算法就比A*更適合,因為我們不知道哪個更近。用A*,我們唯一的選擇是依次對每個目標許路并計算距離,然后選擇最近的路徑。我們尋找的目標可能會有不計其數的位置,我們只想找其中最近的,而我們并不知道它在哪里,或者不知道哪個是最近的。


?

看完上面的介紹,再來看一個比較經典的題目:knight moves。貌似也叫漢密爾頓路徑,具體的我也不記得了。對這個問題我用A*算法來求解,正所謂光說不練是沒有用的

http://acm.pku.edu.cn/JudgeOnline/problem?id=2243
problem statement

A friend of you is doing research on the Traveling Knight Problem (TKP) where you are to find the shortest closed tour of knight moves that visits each square of a given set of n squares on a chessboard exactly once. He thinks that the most difficult part of the problem is determining the smallest number of knight moves between two given squares and that, once you have accomplished this, finding the tour would be easy.
Of course you know that it is vice versa. So you offer him to write a program that solves the "difficult" part.

Your job is to write a program that takes two squares a and b as input and then determines the number of knight moves on a shortest route from a to b.

Input Specification

The input file will contain one or more test cases. Each test case consists of one line containing two squares separated by one space. A square is a string consisting of a letter (a-h) representing the column and a digit (1-8) representing the row on the chessboard.

Output Specification

For each test case, print one line saying "To get from xx to yy takes n knight moves.".

Sample Input

e2 e4

a1 b2

b2 c3

a1 h8

a1 h7

h8 a1

b1 c3

f6 f6

Sample Output

To get from e2 to e4 takes 2 knight moves.

To get from a1 to b2 takes 4 knight moves.

To get from b2 to c3 takes 2 knight moves.

To get from a1 to h8 takes 6 knight moves.

To get from a1 to h7 takes 5 knight moves.

To get from h8 to a1 takes 6 knight moves.

To get from b1 to c3 takes 1 knight moves.

To get from f6 to f6 takes 0 knight moves.
題目的意思大概是說:在國際象棋的棋盤上,一匹馬共有8個可能的跳躍方向,求從起點到目標點之間的最少跳躍次數。

?

以下是原作者的代碼以及一稿翻譯的注釋(可能不是= =):

1 #include <iostream>2 #include <queue>3 using namespace std;4 5 struct knight{6 int x,y,step;7 int g,h,f;8 bool operator < (const knight & k) const{ //重載比較運算符9 return f > k.f; 10 } 11 }k; 12 bool visited[8][8]; //已訪問標記(關閉列表) 13 int x1,y1,x2,y2,ans; //起點(x1,y1),終點(x2,y2),最少移動次數ans 14 int dirs[8][2]={{-2,-1},{-2,1},{2,-1},{2,1},{-1,-2},{-1,2},{1,-2},{1,2}};//8個移動方向 15 priority_queue<knight> que; //最小優先級隊列(開啟列表) 16 17 bool in(const knight & a){ //判斷knight是否在棋盤內 18 if(a.x<0 || a.y<0 || a.x>=8 || a.y>=8) 19 return false; 20 return true; 21 } 22 int Heuristic(const knight &a){ //manhattan估價函數 23 return (abs(a.x-x2)+abs(a.y-y2))*10; 24 } 25 void Astar(){ //A*算法 26 knight t,s; 27 while(!que.empty()){ 28 t=que.top(),que.pop(),visited[t.x][t.y]=true; 29 if(t.x==x2 && t.y==y2){ 30 ans=t.step; 31 break; 32 } 33 for(int i=0;i<8;i++){ 34 s.x=t.x+dirs[i][0],s.y=t.y+dirs[i][1]; 35 if(in(s) && !visited[s.x][s.y]){ 36 s.g = t.g + 23; //23表示根號5乘以10再取其ceil 37 s.h = Heuristic(s); 38 s.f = s.g + s.h; 39 s.step = t.step + 1; 40 que.push(s); 41 } 42 } 43 } 44 } 45 int main(){ 46 char line[5]; 47 while(gets(line)){ 48 x1=line[0]-'a',y1=line[1]-'1',x2=line[3]-'a',y2=line[4]-'1'; 49 memset(visited,false,sizeof(visited)); 50 k.x=x1,k.y=y1,k.g=k.step=0,k.h=Heuristic(k),k.f=k.g+k.h; 51 while(!que.empty()) que.pop(); 52 que.push(k); 53 Astar(); 54 printf("To get from %c%c to %c%c takes %d knight moves.\n",line[0],line[1],line[3],line[4],ans); 55 } 56 return 0; 57 } 58

注解:這份代碼的評價函數是正確的(針對此題),原文中有不少反對的評論,在次聲明。

?

------------------------------以下是個人的理解-------------------------------------

  A*算法其實核心只有兩個:充分了解題目+設計F函數。設計F函數沒有什么所謂的“精髓”“公式”,就是靠多做題的感覺吧。

  事實上,一份好的A*算法不在于多么美妙精準的F函數,而在于這個思想本身。希望讀者不要舍本求末。(完)

總結

以上是生活随笔為你收集整理的A* 算法讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美一级片免费播放 | 免费激情在线电影 | 91视频免费看网站 | 欧美精品亚洲精品日韩精品 | 国产高清av免费在线观看 | 日韩精品一区二区免费视频 | 精品亚洲视频在线 | 91人人视频在线观看 | 久久一本综合 | 麻花天美星空视频 | 在线免费av网站 | 欧美a级在线播放 | 超碰97免费| 亚洲极色| 天天玩天天干天天操 | 婷婷精品国产一区二区三区日韩 | 国产va精品免费观看 | 三级黄色三级 | 亚洲成人一区 | 成年人免费在线观看网站 | 久久艹久久 | 成年人免费av | 欧美成年人在线视频 | 成人h电影 | 亚洲成人黄色网址 | 亚洲精品免费播放 | 久久久久电影网站 | 国产小视频免费在线观看 | 亚洲女同ⅹxx女同tv | 国产破处精品 | 亚洲精品视频在线免费播放 | 特级a老妇做爰全过程 | 免费网站v| 九九久久电影 | 欧美一区二区日韩一区二区 | 久草网视频在线观看 | 日日夜夜天天综合 | 黄色av一区二区 | 日韩一区二区三免费高清在线观看 | 91成人小视频 | 成人午夜av电影 | 黄色成人毛片 | 欧美日韩高清不卡 | 亚洲精品一区二区三区在线观看 | 91视频免费网站 | 亚洲经典在线 | 在线视频欧美日韩 | 91麻豆精品一区二区三区 | 国产精品黄色在线观看 | 激情综合网色播五月 | 国产欧美最新羞羞视频在线观看 | 免费看一级 | 在线观看91网站 | 免费影视大全推荐 | www.色婷婷.com| 国产原创av在线 | 国产成人久久精品一区二区三区 | 国产国语在线 | av手机版| 久久黄色免费视频 | 天天操天天干天天玩 | 免费能看的av | 精品 一区 在线 | 视频在线观看一区 | 成人在线一区二区 | 日韩亚洲在线视频 | 亚洲 欧美 综合 在线 精品 | 久操伊人| 五月婷婷久草 | 亚洲精品欧美成人 | 亚洲精选在线 | 久久久黄色 | 亚洲一二三区精品 | 亚洲精品免费看 | 欧洲亚洲激情 | 国产精品自产拍在线观看蜜 | 一本一本久久a久久精品综合妖精 | 亚洲综合在线发布 | 色婷婷导航 | 五月天综合网站 | 久草国产在线观看 | 九九视频一区 | 天天天综合 | 欧美另类v | 亚洲少妇xxxx| 国产精品一区久久久久 | 国产午夜精品在线 | 欧美日韩高清不卡 | 日韩午夜剧场 | 特级大胆西西4444www | 国产精品久久一区二区无卡 | 久久久久国产精品厨房 | av在线进入 | av免费网| 午夜精品电影一区二区在线 | av短片在线观看 | 黄色小说视频在线 | 亚洲精品动漫在线 | 天天插日日插 | 日日夜夜免费精品 | 国产亚洲精品女人久久久久久 | 成人av在线网| 国产色久 | 亚洲尺码电影av久久 | 中文字幕一区二区在线播放 | 四虎4hu永久免费 | 91色网址 | 九九九九色 | 91久久一区二区 | 欧美小视频在线观看 | 国产123区在线观看 国产精品麻豆91 | 亚洲四虎在线 | 中文字幕视频免费观看 | 深爱综合网 | 国产1区在线 | 夜夜躁狠狠躁日日躁 | 亚洲国产福利视频 | 国产精品久久久久久久久软件 | 午夜视频日本 | 免费成人短视频 | 综合网在线视频 | 久久99视频 | 免费看网站在线 | 亚洲精品久久久久久国 | 久久免费视频这里只有精品 | 免费福利视频网站 | 久久精品看 | 久久艹国产视频 | 国产淫片免费看 | 久久久久久高清 | 亚洲免费在线视频 | 日韩国产精品一区 | 国产视频久久久久 | 日韩一区二区三区在线观看 | 丁香五月亚洲综合在线 | 精品国产自在精品国产精野外直播 | 国产久视频 | 人人澡视频 | 免费精品视频在线 | 亚洲欧美婷婷六月色综合 | 碰碰影院 | 午夜婷婷在线播放 | 久久精品久久综合 | 中文字幕国语官网在线视频 | 国产又粗又猛又爽又黄的视频先 | 中文字幕制服丝袜av久久 | 91中文字幕| 欧美黄色高清 | 日韩欧美在线综合网 | 天天五月天色 | 国产剧情一区二区在线观看 | 有码一区二区三区 | 免费看国产视频 | 天天爽夜夜操 | 成人在线免费观看视视频 | 国产精品一区二区三区久久 | 日韩在线激情 | 精品一区二区电影 | 国产精品密入口果冻 | 91精品国产乱码久久桃 | 日韩在线观看小视频 | 国产精品久久久久久久久久久久久 | 国产精品6 | 99久在线精品99re8热视频 | 亚洲高清视频在线播放 | 久久全国免费视频 | 亚洲一区二区精品 | 天天干天天操天天搞 | 在线观看日韩视频 | 江苏妇搡bbbb搡bbbb | 色姑娘综合天天 | 久久久999精品视频 国产美女免费观看 | 九九免费在线观看 | 日韩在线色视频 | 中文字幕一区二区三区久久蜜桃 | 99色免费| 国产精品一区二区久久精品爱涩 | 国产五月 | 国产综合在线视频 | 国产精品一区久久久久 | 国产欧美精品在线观看 | 国产成人精品免高潮在线观看 | 久久手机精品视频 | 日韩精品一区二区三区在线播放 | 97成人资源 | 成人小视频在线观看免费 | 国产一区二区精品久久 | 婷婷丁香色综合狠狠色 | 免费视频资源 | 91精品系列| 中文字幕av在线免费 | 精品福利网站 | 国产成人久久精品亚洲 | 亚洲精品美女久久久久 | 欧美日韩在线视频一区二区 | 热久精品 | 亚洲成人黄色网址 | 在线视频免费观看 | 国产手机精品视频 | 91麻豆高清视频 | 国产精品久久艹 | 香蕉视频在线观看免费 | 国产专区免费 | 在线播放av网址 | 在线观看中文字幕第一页 | 狠狠狠狠干 | a在线观看视频 | 51久久夜色精品国产麻豆 | 亚洲国产影院av久久久久 | 欧美日韩在线电影 | 91漂亮少妇露脸在线播放 | 国内视频在线 | 91av大全| 色婷婷狠狠 | 日韩有码在线观看视频 | 一本一道久久a久久综合蜜桃 | 9999亚洲| www.天天射 | 国产精品毛片久久久久久久 | 久久久官网 | 久久另类小说 | 亚洲资源在线网 | 黄色av电影 | 有码中文字幕 | www.黄色小说.com | 在线观看免费av网 | 国产高清绿奴videos | 久久伦理电影 | 精品国产乱码一区二区三区在线 | 懂色av懂色av粉嫩av分享吧 | 午夜美女福利 | 在线免费中文字幕 | 91探花国产综合在线精品 | 日韩免费二区 | 九九亚洲精品 | 中文字幕日本电影 | 美女国内精品自产拍在线播放 | 免费观看黄色av | 亚洲精品免费看 | 狠狠色丁香久久婷婷综合_中 | 午夜视频在线观看一区 | 国产伦精品一区二区三区无广告 | www.超碰| 国产精品久久久久久五月尺 | 黄色aaa毛片 | 91污视频在线 | 日韩二区三区在线观看 | 五月天狠狠操 | 久久综合狠狠综合久久综合88 | 伊甸园永久入口www 99热 精品在线 | 在线视频麻豆 | 在线观看电影av | 精品国产色 | 婷婷综合 | 成人网在线免费视频 | 久久爱导航 | 免费a视频在线 | 日韩av五月天 | 麻豆视频网址 | 在线观看亚洲a | 欧美成人h版在线观看 | 国产成人性色生活片 | 天堂在线免费视频 | 久久免费一级片 | 亚洲精品91天天久久人人 | 久久精品毛片基地 | 最新国产精品亚洲 | 免费观看日韩av | 成人动漫精品一区二区 | 成人一区二区三区在线 | 亚洲精品综合一区二区 | 中文字幕在线有码 | 免费a级观看 | 伊人中文在线 | 人人舔人人插 | 激情视频免费观看 | 欧美日韩不卡一区二区三区 | www一起操 | av电影久久 | 亚洲天堂在线观看完整版 | 精品视频www | 亚洲自拍偷拍色图 | 国产精品一区二区久久久久 | 毛片a级片 | 亚洲第一中文字幕 | 久久精品精品 | 中文字幕在线观看完整 | 国产在线不卡视频 | 久久久官网 | 免费观看高清 | 中文字幕久久精品 | 91视频88av | 热久久国产精品 | 国产精品久久久久久久久久了 | 国产视频一区二区在线播放 | 亚洲综合五月天 | 国产男女爽爽爽免费视频 | 一区二区三区在线免费播放 | 亚洲aⅴ一区二区三区 | 欧美大码xxxx | av免费电影在线观看 | 99热最新| 亚洲精品人人 | 黄视频网站大全 | 人成免费网站 | 蜜桃视频色| 在线观看中文字幕一区二区 | 久久久久久高潮国产精品视 | 国产91影院 | 精品免费在线视频 | 欧美日韩综合在线 | 国产在线观看一区 | 国产精品 国内视频 | 国产最新在线观看 | 91视视频在线直接观看在线看网页在线看 | www.色就是色 | 九九久久婷婷 | 99精品热视频只有精品10 | 草久久久久久久 | 精品1区2区 | 久草视频视频在线播放 | 国产精品美女在线观看 | 久久国产女人 | 在线 视频 一区二区 | 最近最新中文字幕视频 | 九九热re | 久久高清免费观看 | 日韩高清免费电影 | 91你懂的 | 欧美性超爽 | 色婷婷久久久综合中文字幕 | 国产精品中文字幕av | 精品一区二区日韩 | 免费a一级 | 国产精品一级在线 | 91视频a| 国产在线精品区 | 黄色av网站在线观看免费 | 久草在线最新免费 | av丝袜在线 | 91最新中文字幕 | 国产精品国产三级国产aⅴ9色 | 99久久www| 在线电影 你懂得 | 国产群p | av大片免费在线观看 | 国产一级三级 | 精品美女国产在线 | 日韩精品欧美精品 | 日韩免费网址 | 天天操狠狠操 | 日韩免费一区二区 | 91在线免费观看网站 | 欧美性极品xxxx娇小 | 欧美一级片播放 | 四虎在线观看网址 | 婷婷久草 | 久久精品99 | 国产精品女同一区二区三区久久夜 | 不卡电影免费在线播放一区 | 亚洲一区二区视频在线 | aaa黄色毛片| 久久精品免费看 | 精品欧美日韩 | 久久特级毛片 | 日本亚洲国产 | 狠狠狠色丁香综合久久天下网 | 国产高清在线观看 | av成人免费在线看 | 国产99精品| 91视频在线播放视频 | 91精选在线 | 女人18精品一区二区三区 | 久久综合一本 | 99re中文字幕 | 成人黄色片在线播放 | 久久夜色精品国产欧美一区麻豆 | 久久艹艹 | 精品毛片久久久久久 | a久久免费视频 | 麻豆91小视频| 日本高清久久久 | 在线精品视频在线观看高清 | 欧美一级片免费观看 | 最近的中文字幕大全免费版 | 天天综合色天天综合 | 久久免费国产精品 | 欧洲激情在线 | 狠狠色丁香婷婷综合视频 | 欧美日韩一二三四区 | 免费观看午夜视频 | 亚洲专区在线播放 | 久久99精品久久久久婷婷 | 国产福利91精品一区二区三区 | 婷婷综合成人 | 操处女逼 | 99视频精品全部免费 在线 | 久久99深爱久久99精品 | 亚洲精品啊啊啊 | 午夜视频不卡 | 欧美另类v | 最近中文字幕mv免费高清在线 | 日本在线观看一区二区 | 一级黄色片在线播放 | 久久免费视频3 | 日韩激情第一页 | 在线免费观看成人 | 人人搞人人爽 | 亚洲精品美女久久久久 | 最近中文字幕大全 | 国产精品久久久久永久免费看 | 国产精品第2页 | 日韩专区在线播放 | 黄色成人影院 | 91免费的视频在线播放 | 久久一区国产 | 麻豆高清免费国产一区 | 日韩三级精品 | 国产视频精选 | 国产99re | 久久久久免费网站 | 免费看三级网站 | 在线看国产一区 | 97超碰国产在线 | 国产成年免费视频 | 久久99热久久99精品 | 高清免费av在线 | 精品一区二区亚洲 | www.888.av | 国产精品高清在线观看 | 色a综合 | 久久视频免费在线观看 | 亚州精品成人 | 婷婷激情综合 | www.久久爱.cn | 日日天天av| 成人免费在线观看入口 | 欧美老人xxxx18 | 久久精品99国产精品日本 | 久久尤物电影视频在线观看 | 91久久精品一区二区三区 | 91av电影在线 | 草久久av | 中文字幕你懂的 | 成人免费视频免费观看 | 日韩在线视频网址 | 国产一区二区在线免费观看 | 天天综合网天天 | 欧美日韩国产精品一区二区三区 | 手机av电影在线观看 | 免费a现在观看 | 草久久久| 日韩 精品 一区 国产 麻豆 | 91在线观看视频网站 | 国产精品一区二区免费在线观看 | 97人人澡人人爽人人模亚洲 | 亚洲人成人在线 | 天天操狠狠操网站 | 欧美日韩在线视频观看 | 波多野结衣在线观看视频 | 亚洲年轻女教师毛茸茸 | 日韩综合视频在线观看 | 成年人免费在线观看 | 精品国产一区二区三区日日嗨 | 亚洲精品在线观看av | 欧美韩国日本在线观看 | 激情网在线视频 | 在线观看中文字幕2021 | 亚洲综合最新在线 | 91女子私密保健养生少妇 | 天天操狠狠操网站 | 91精品视频在线 | 高清不卡一区二区三区 | 日韩一级黄色av | 欧美激情在线网站 | 天天干夜夜操视频 | 天天色天天操天天爽 | 久久免费视频99 | 91精品啪在线观看国产线免费 | 久久久久久久影视 | 日韩色一区二区三区 | 视频一区二区免费 | 国产成人在线观看 | 麻豆果冻剧传媒在线播放 | 久久国产露脸精品国产 | 色综合久久久久久久久五月 | 久久激五月天综合精品 | 黄色大片中国 | 日韩在线视频一区二区三区 | 夜夜骑日日| 久久玖 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 免费亚洲黄色 | 久久精品艹 | 狠狠干夜夜爱 | 99精品在线播放 | 天堂av在线免费观看 | 日本在线观看中文字幕无线观看 | 久久在线免费观看 | www.久久com | 狠狠干狠狠久久 | www.久久久久 | 亚洲高清视频在线观看免费 | 国产精品免费观看久久 | 91喷水 | 亚洲精品网址在线观看 | 一区二区三区精品在线视频 | 国产精品久久久久亚洲影视 | 久久9999久久| 最近2019好看的中文字幕免费 | 欧美一区二区在线看 | 亚洲综合视频在线观看 | 国产亚洲视频在线免费观看 | 草久在线观看视频 | 久久这里| 91免费版成人 | 日本韩国精品一区二区在线观看 | 国产在线观看黄 | 国产精品永久免费观看 | 成人黄性视频 | 在线观看av免费 | 欧美一区二区在线刺激视频 | 天天操夜夜拍 | 国内精品久久久久久久影视简单 | 国产精品电影一区 | 狠狠艹夜夜干 | 久久精品伊人 | 免费网站黄 | 麻豆传媒视频在线 | 国产亚洲婷婷免费 | 99精品国产一区二区 | 欧美视屏一区二区 | bbbb操bbbb | 国产午夜一区 | 视频一区二区精品 | 亚洲成人资源 | 国产精品福利无圣光在线一区 | 国产精品毛片久久久久久久久久99999999 | 久 久久影院 | 日韩视频在线不卡 | 伊色综合久久之综合久久 | 99久久www免费 | 久久免费影院 | 公与妇乱理三级xxx 在线观看视频在线观看 | 九九热视频在线免费观看 | 少妇av片 | 免费看精品久久片 | 国产精品一区一区三区 | 日韩欧美一区二区在线播放 | 99久久婷婷国产精品综合 | 在线观看国产 | 精品国产一区在线观看 | 日韩欧美网站 | 99久久久久国产精品免费 | 久久99在线观看 | 免费av的网站 | 国产在线美女 | 黄色片毛片 | 免费观看xxxx9999片 | 久久免费影院 | 在线观看中文字幕视频 | 人人狠狠综合久久亚洲婷 | 毛片美女网站 | 欧美另类网站 | 久久久免费毛片 | 天天操天天谢 | 九九久久成人 | 亚洲永久精品视频 | 丁香激情五月 | 91视频在线国产 | 亚洲一区网 | av电影免费观看 | 色婷婷综合成人av | 黄色网在线播放 | 国产精品门事件 | 天天操夜夜操 | 免费成人黄色av | 国产精品99视频 | 久久99精品久久久久久 | 免费观看性生活大片 | 国产男女无遮挡猛进猛出在线观看 | 狠狠做深爱婷婷综合一区 | 91精品国产福利 | 99视频在线观看免费 | 久久网址 | 黄色字幕网 | 97在线观看免费视频 | 日韩欧美69 | 久久精品在线视频 | 又紧又大又爽精品一区二区 | 成人a级网站 | 福利一区二区在线 | 久久久久久久网站 | 亚洲国产成人久久综合 | 一级片免费观看视频 | 欧美亚洲免费在线一区 | 丁香花在线视频观看免费 | 日本资源中文字幕在线 | 亚洲欧美精品在线 | 国产在线综合视频 | 最近的中文字幕大全免费版 | 欧美色操| 日女人免费视频 | 国产不卡免费视频 | 国产精品女同一区二区三区久久夜 | 天天射天天色天天干 | 国产a免费 | 亚洲欧洲一区二区在线观看 | 久久精品亚洲国产 | 五月婷婷丁香综合 | 叶爱av在线| 日本久久久久久久久久久 | 成人久久影院 | 国色天香在线 | 色www.| 色综合五月 | 国产青青青 | 中文字幕在线观看网址 | 亚洲第一中文字幕 | а天堂中文最新一区二区三区 | 天天草天天干天天射 | 欧美日韩中文国产一区发布 | 中文电影网 | 99久久精品久久久久久清纯 | 亚洲成人资源网 | 国产精品久久久久久久久久不蜜月 | 91成人免费 | 在线中文字幕av观看 | 欧美成人精品欧美一级乱黄 | 在线视频观看成人 | 美女视频网 | 91成年视频| 日韩偷拍精品 | 99精品国产兔费观看久久99 | www.色爱 | 成人av片免费看 | 天天干天天操天天射 | 国产精品久久久久久久婷婷 | 91亚洲精品久久久蜜桃借种 | 欧美性另类| 999久久国产 | 久久精品网站视频 | 久久精品最新 | 人人干人人模 | 精品一二三区视频 | 香蕉影院在线播放 | 久免费| 精品国产伦一区二区三区免费 | 91热爆视频 | 美女av免费看 | 人人涩| 开心激情网五月天 | 在线视频观看91 | 五月综合色婷婷 | av中文在线影视 | 久久综合色综合88 | 日本护士三级少妇三级999 | 四虎成人精品永久免费av九九 | 中文字幕人成乱码在线观看 | 亚洲成人家庭影院 | www·22com天天操 | 亚洲精品高清视频 | 日日夜夜人人天天 | 久久久久久草 | 韩国av一区二区三区在线观看 | 草久电影 | 久久精美视频 | 青青色影院 | 精品久久久久久久久亚洲 | 日韩久久网站 | 久久99国产精品二区护士 | 黄色av影视 | 国产精品一区欧美 | 久久婷婷综合激情 | 久草国产在线观看 | 国产xvideos免费视频播放 | 中文在线中文资源 | 1024手机看片国产 | 欧美日韩精品网站 | 三级性生活视频 | 国产精品第7页 | 成人综合免费 | 中文字幕在线观看2018 | 91丨精品丨蝌蚪丨白丝jk | 色综合天天 | 高清av免费看 | 免费观看www7722午夜电影 | 日韩在线不卡av | 久久综合婷婷国产二区高清 | 91精品视频播放 | 国产亚洲免费观看 | 免费在线观看一级片 | 久草在线视频在线 | 在线 日韩 av | 一区二区高清在线 | 欧美在线99 | 国产午夜精品一区二区三区四区 | 九九热有精品 | 久热免费 | 国产女人40精品一区毛片视频 | 久久手机免费视频 | 免费成人在线观看视频 | 久草com| 97超碰色偷偷 | 亚洲最新视频在线播放 | 久久国产露脸精品国产 | 久久这里只精品 | 日韩欧美综合精品 | 最近免费中文字幕 | 久久久久北条麻妃免费看 | 国产精品久久久久久久久久免费 | 超级碰碰视频 | 欧美另类sm图片 | 不卡的av在线播放 | 国产一区二三区好的 | 精品一区二三区 | 中日韩在线| 中文字幕日韩免费视频 | 久久影院精品 | 五月综合久久 | 一区二区三区在线电影 | 国产精品69久久久久 | 天天操狠狠操 | 国产剧情一区二区在线观看 | 午夜精品久久久久久久久久 | 免费又黄又爽 | 欧美日韩在线观看视频 | 亚洲丁香久久久 | 在线观看一区视频 | 色噜噜日韩精品一区二区三区视频 | 免费高清在线观看电视网站 | 日日夜日日干 | 日韩一二区在线 | 成人免费一区二区三区在线观看 | 日韩免费在线观看视频 | 日日操天天操狠狠操 | 最近中文字幕高清字幕免费mv | 日韩高清免费电影 | 中文在线天堂资源 | 伊人成人精品 | 日本公妇色中文字幕 | 国产精品视频最多的网站 | 在线看黄色的网站 | 91视频亚洲 | 国产成a人亚洲精v品在线观看 | 91亚洲夫妻 | 亚洲一区二区三区毛片 | 日韩精品一区二区免费 | 91av在线免费看 | 久久久久成人精品 | 人人超碰免费 | 国产精品videossex国产高清 | 亚洲理论在线 | 久久精品99国产 | 久久99精品国产 | 日日爱影视 | www.久草视频 | 99久久综合狠狠综合久久 | 亚洲 欧美 国产 va在线影院 | 国产在线 一区二区三区 | www.777奇米 | 国产精选在线观看 | 欧美午夜精品久久久久 | 国产精品一区二区在线看 | 99久久精品国产一区 | 亚洲国产日韩一区 | 久久久久久久久久免费 | 一区二区久久 | 91| 欧美日韩视频网站 | 亚洲天堂自拍视频 | 91精品国产福利在线观看 | 国产精品麻豆欧美日韩ww | 激情五月五月婷婷 | 久草9视频 | 国产精品99久久久久人中文网介绍 | 热九九精品 | 国产精品不卡在线观看 | 毛片的网址 | 久久久久成人免费 | 精品96久久久久久中文字幕无 | 午夜美女福利 | 天天摸天天弄 | 中文字幕在线观看亚洲 | 国产精品 中文字幕 亚洲 欧美 | 日韩高清免费在线 | 国产精品久久久久久久久久白浆 | 四虎在线免费 | 国产精品久久99综合免费观看尤物 | 黄色av免费电影 | 最近最新中文字幕视频 | 在线免费观看黄色小说 | 国产精品av电影 | 国产亚洲欧美在线视频 | 国内精品久久久久影院男同志 | 国产视频91在线 | 91亚洲精品国偷拍 | 国产精品免费看久久久8精臀av | 黄色a在线 | 免费h漫在线观看 | 亚洲精品视频 | 中文在线8资源库 | 激情文学综合丁香 | 午夜精品福利一区二区三区蜜桃 | 夜色资源站国产www在线视频 | 99精品久久精品一区二区 | 欧美精品久久久久久久亚洲调教 | 亚洲精品视频一二三 | 99视频网址 | 久久黄色免费视频 | 奇米影视在线99精品 | 97视频免费观看 | 爱射综合 | 中文字幕在线观看免费高清完整版 | 欧美人zozo | av在线永久免费观看 | 久久午夜影视 | 欧美一区二区三区在线观看 | 精品久久一级片 | 亚洲精品黄 | 日韩综合色 | 91亚洲国产成人 | 亚洲区另类春色综合小说校园片 | 欧美天天综合网 | 青青河边草免费 | 国产精品第一页在线 | 成人午夜影院在线观看 | 玖玖综合网 | 国产一级二级在线观看 | 午夜久久影院 | 国产一级片免费视频 | 国产成人精品久久 | 福利在线看片 | 最新色站| 久久国产精品影视 | 亚洲一区在线看 | 999久久国产精品免费观看网站 | 精品国产_亚洲人成在线 | 日韩av中文在线观看 | 色久天| 久久9999久久 | 狠狠色狠狠色综合日日小说 | 久久三级视频 | 久久66热这里只有精品 | 国产第一二区 | 亚洲精品自在在线观看 | 中文字幕无吗 | 精品国产精品国产偷麻豆 | 日韩在线观看视频在线 | 精品极品在线 | 91视频电影| 久久天天躁夜夜躁狠狠躁2022 | 精品久久久久久久久久久院品网 | 麻豆视频免费在线观看 | 在线观看成人毛片 | 天天操操操操操操 | 日韩va亚洲va欧美va久久 | 中文字幕欧美日韩va免费视频 | 黄色片视频免费 | av黄免费看 | 超碰公开在线 | 国产美女免费观看 | 欧美一区中文字幕 | 国产精品福利午夜在线观看 | 丁香婷婷成人 | 精品福利视频在线 | av网站在线免费观看 | 亚洲精品欧美精品 | 99色网站 | 国产不卡毛片 | 国产原创中文在线 | 亚洲一区精品二人人爽久久 | 开心色婷婷 | 国产免费嫩草影院 | 久久久亚洲网站 | 婷婷色网视频在线播放 | av不卡中文字幕 | 成人一级黄色片 | 欧美极品xxxxx | 五月天中文字幕mv在线 | 亚洲精品久久激情国产片 | 亚洲最大成人免费网站 | 亚洲理论视频 | 免费婷婷| 国产一区二区三区四区在线 | 色噜噜在线观看视频 | avv天堂| 一本一本久久a久久精品牛牛影视 | 亚洲精品午夜视频 | 午夜久久久久久久 | 国产黄a三级三级三级三级三级 | 天天做天天爱天天爽综合网 | 亚洲久草在线 | 久久婷婷网 | 国内精品久久久久久久久久久久 | 在线观看免费国产小视频 | 久久毛片高清国产 | 久久久久欠精品国产毛片国产毛生 | 日日插日日干 | 国产99久久精品 | 日韩在线在线 | 免费高清男女打扑克视频 | 日本三级久久久 | 日韩黄色软件 | 五月婷婷在线综合 | 不卡电影一区二区三区 | 香蕉在线视频播放网站 | 在线观看中文字幕一区二区 | 免费毛片一区二区三区久久久 | 免费看色的网站 | 狠狠色丁香久久婷婷综 | 一区二区三区中文字幕在线 | 操操综合网| 久久久久久国产精品久久 | 一级久久精品 | 国产在线高清视频 | 成人av播放 | 日韩成人黄色av | 日本最新一区二区三区 | 色资源网在线观看 | 久久精品一区二区 | 亚洲午夜精品一区二区三区电影院 | 狠狠干夜夜爱 | 五月天综合色激情 | 久久婷婷丁香 | 四虎在线免费视频 | 国产中文字幕av | 亚洲精品三级 | 97精品久久人人爽人人爽 | 亚洲精品视频在线免费 | 亚洲va欧美 | 成人午夜影院在线观看 | 成人在线视频一区 | 亚洲国产一区二区精品专区 | 在线国产日韩 | 久久久91精品国产一区二区精品 | av大片网站| 96久久精品 | 国产亚洲激情视频在线 | 久久免费看 | 男女视频91 | 久久免费看毛片 | 国产精品永久 | 久久在线视频精品 | av在线播放不卡 | 日韩av午夜在线观看 | 一区二区三区影院 | 中文字幕在线不卡国产视频 | 99久高清在线观看视频99精品热在线观看视频 | 天天操夜夜爱 | 色黄www小说 | 99久久国产免费免费 | www.日韩免费| 成 人 免费 黄 色 视频 | 国产aaa大片 | 亚洲天堂精品视频在线观看 | 中文字幕美女免费在线 | 日本女人b| 一区二区三区电影在线播 | 青青河边草观看完整版高清 | 日韩一区二区三区高清在线观看 | 天堂网av在线 | 日韩欧美久久 | 91大神在线看 | 久久观看 | 久久精品激情 | 日本在线观看视频一区 | 国产我不卡 | av成人免费在线 | se婷婷 | 91视频 - 88av| 黄色软件在线观看 | 96亚洲精品久久久蜜桃 | 草樱av| 亚洲精品视频免费在线观看 | 国产精品网站一区二区三区 | 婷婷色六月天 | 亚洲成人欧美 | 国产精品24小时在线观看 | 成人免费在线看片 | 亚洲婷婷综合色高清在线 | 亚洲美女免费精品视频在线观看 | 高清av在线免费观看 | 国产一区二区三区高清播放 | 91精品国产99久久久久久红楼 | 久久玖| 久久久网址 | 国产精品99精品久久免费 | www.久久爱.cn | 久久久亚洲国产精品麻豆综合天堂 | 色网站免费在线看 | 亚洲精品999 | 中文字幕久久久精品 | 亚洲精品成人av在线 | 欧美日韩国产在线观看 | 婷婷丁香综合 | 黄毛片在线观看 | 97人人模人人爽人人喊中文字 |