成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > python實現(xiàn)A*尋路算法

python實現(xiàn)A*尋路算法

熱門標(biāo)簽:打電話機器人營銷 聊城語音外呼系統(tǒng) ai電銷機器人的優(yōu)勢 地圖標(biāo)注自己和別人標(biāo)注區(qū)別 騰訊地圖標(biāo)注沒法顯示 商家地圖標(biāo)注海報 南陽打電話機器人 孝感營銷電話機器人效果怎么樣 海外網(wǎng)吧地圖標(biāo)注注冊

A* 算法簡介

A* 算法需要維護(hù)兩個數(shù)據(jù)結(jié)構(gòu):OPEN 集和 CLOSED 集。OPEN 集包含所有已搜索到的待檢測節(jié)點。初始狀態(tài),OPEN集僅包含一個元素:開始節(jié)點。CLOSED集包含已檢測的節(jié)點。初始狀態(tài),CLOSED集為空。每個節(jié)點還包含一個指向父節(jié)點的指針,以確定追蹤關(guān)系。

A* 算法會給每個搜索到的節(jié)點計算一個G+H 的和值F:

  • F = G + H
  • G:是從開始節(jié)點到當(dāng)前節(jié)點的移動量。假設(shè)開始節(jié)點到相鄰節(jié)點的移動量為1,該值會隨著離開始點越來越遠(yuǎn)而增大。
  • H:是從當(dāng)前節(jié)點到目標(biāo)節(jié)點的移動量估算值。
    • 如果允許向4鄰域的移動,使用曼哈頓距離。
    • 如果允許向8鄰域的移動,使用對角線距離。

算法有一個主循環(huán),重復(fù)下面步驟直到到達(dá)目標(biāo)節(jié)點:
1 每次從OPEN集中取一個最優(yōu)節(jié)點n(即F值最小的節(jié)點)來檢測。
2 將節(jié)點n從OPEN集中移除,然后添加到CLOSED集中。
3 如果n是目標(biāo)節(jié)點,那么算法結(jié)束。
4 否則嘗試添加節(jié)點n的所有鄰節(jié)點n'。

  • 鄰節(jié)點在CLOSED集中,表示它已被檢測過,則無需再添加。
  • 鄰節(jié)點在OPEN集中:
    • 如果重新計算的G值比鄰節(jié)點保存的G值更小,則需要更新這個鄰節(jié)點的G值和F值,以及父節(jié)點;
    • 否則不做操作
  • 否則將該鄰節(jié)點加入OPEN集,設(shè)置其父節(jié)點為n,并設(shè)置它的G值和F值。

有一點需要注意,如果開始節(jié)點到目標(biāo)節(jié)點實際是不連通的,即無法從開始節(jié)點移動到目標(biāo)節(jié)點,那算法在第1步判斷獲取到的節(jié)點n為空,就會退出

關(guān)鍵代碼介紹

保存基本信息的地圖類

地圖類用于隨機生成一個供尋路算法工作的基礎(chǔ)地圖信息

先創(chuàng)建一個map類, 初始化參數(shù)設(shè)置地圖的長度和寬度,并設(shè)置保存地圖信息的二維數(shù)據(jù)map的值為0, 值為0表示能移動到該節(jié)點。

class Map():
	def __init__(self, width, height):
		self.width = width
		self.height = height
		self.map = [[0 for x in range(self.width)] for y in range(self.height)]

在map類中添加一個創(chuàng)建不能通過節(jié)點的函數(shù),節(jié)點值為1表示不能移動到該節(jié)點。

	def createBlock(self, block_num):
		for i in range(block_num):
			x, y = (randint(0, self.width-1), randint(0, self.height-1))
			self.map[y][x] = 1

在map類中添加一個顯示地圖的函數(shù),可以看到,這邊只是簡單的打印出所有節(jié)點的值,值為0或1的意思上面已經(jīng)說明,在后面顯示尋路算法結(jié)果時,會使用到值2,表示一條從開始節(jié)點到目標(biāo)節(jié)點的路徑。

	def showMap(self):
		print("+" * (3 * self.width + 2))
		for row in self.map:
			s = '+'
			for entry in row:
				s += ' ' + str(entry) + ' '
			s += '+'
			print(s)
		print("+" * (3 * self.width + 2))

添加一個隨機獲取可移動節(jié)點的函數(shù)

	def generatePos(self, rangeX, rangeY):
		x, y = (randint(rangeX[0], rangeX[1]), randint(rangeY[0], rangeY[1]))
		while self.map[y][x] == 1:
			x, y = (randint(rangeX[0], rangeX[1]), randint(rangeY[0], rangeY[1]))
		return (x , y)

搜索到的節(jié)點類

每一個搜索到將到添加到OPEN集的節(jié)點,都會創(chuàng)建一個下面的節(jié)點類,保存有entry的位置信息(x,y),計算得到的G值和F值,和該節(jié)點的父節(jié)點(pre_entry)。

class SearchEntry():
	def __init__(self, x, y, g_cost, f_cost=0, pre_entry=None):
		self.x = x
		self.y = y
		# cost move form start entry to this entry
		self.g_cost = g_cost
		self.f_cost = f_cost
		self.pre_entry = pre_entry
	
	def getPos(self):
		return (self.x, self.y)

算法主函數(shù)介紹

下面就是上面算法主循環(huán)介紹的代碼實現(xiàn),OPEN集和CLOSED集的數(shù)據(jù)結(jié)構(gòu)使用了字典,在一般情況下,查找,添加和刪除節(jié)點的時間復(fù)雜度為O(1), 遍歷的時間復(fù)雜度為O(n), n為字典中對象數(shù)目。

def AStarSearch(map, source, dest):
	...
	openlist = {}
	closedlist = {}
	location = SearchEntry(source[0], source[1], 0.0)
	dest = SearchEntry(dest[0], dest[1], 0.0)
	openlist[source] = location
	while True:
		location = getFastPosition(openlist)
		if location is None:
			# not found valid path
			print("can't find valid path")
			break;
		
		if location.x == dest.x and location.y == dest.y:
			break
		
		closedlist[location.getPos()] = location
		openlist.pop(location.getPos())
		addAdjacentPositions(map, location, dest, openlist, closedlist)
	
	#mark the found path at the map
	while location is not None:
		map.map[location.y][location.x] = 2
		location = location.pre_entry

我們按照算法主循環(huán)的實現(xiàn)來一個個講解用到的函數(shù)。
下面函數(shù)就是從OPEN集中獲取一個F值最小的節(jié)點,如果OPEN集會空,則返回None。

	# find a least cost position in openlist, return None if openlist is empty
	def getFastPosition(openlist):
		fast = None
		for entry in openlist.values():
			if fast is None:
				fast = entry
			elif fast.f_cost > entry.f_cost:
				fast = entry
		return fast

addAdjacentPositions 函數(shù)對應(yīng)算法主函數(shù)循環(huán)介紹中的嘗試添加節(jié)點n的所有鄰節(jié)點n'。

	# add available adjacent positions
	def addAdjacentPositions(map, location, dest, openlist, closedlist):
		poslist = getPositions(map, location)
		for pos in poslist:
			# if position is already in closedlist, do nothing
			if isInList(closedlist, pos) is None:
				findEntry = isInList(openlist, pos)
				h_cost = calHeuristic(pos, dest)
				g_cost = location.g_cost + getMoveCost(location, pos)
				if findEntry is None :
					# if position is not in openlist, add it to openlist
					openlist[pos] = SearchEntry(pos[0], pos[1], g_cost, g_cost+h_cost, location)
				elif findEntry.g_cost > g_cost:
					# if position is in openlist and cost is larger than current one,
					# then update cost and previous position
					findEntry.g_cost = g_cost
					findEntry.f_cost = g_cost + h_cost
					findEntry.pre_entry = location

getPositions 函數(shù)獲取到所有能夠移動的節(jié)點,這里提供了2種移動的方式:

  • 允許上,下,左,右 4鄰域的移動
  • 允許上,下,左,右,左上,右上,左下,右下 8鄰域的移動
	def getNewPosition(map, locatioin, offset):
		x,y = (location.x + offset[0], location.y + offset[1])
		if x  0 or x >= map.width or y  0 or y >= map.height or map.map[y][x] == 1:
			return None
		return (x, y)
		
	def getPositions(map, location):
		# use four ways or eight ways to move
		offsets = [(-1,0), (0, -1), (1, 0), (0, 1)]
		#offsets = [(-1,0), (0, -1), (1, 0), (0, 1), (-1,-1), (1, -1), (-1, 1), (1, 1)]
		poslist = []
		for offset in offsets:
			pos = getNewPosition(map, location, offset)
			if pos is not None:			
				poslist.append(pos)
		return poslist

isInList 函數(shù)判斷節(jié)點是否在OPEN集 或CLOSED集中

	# check if the position is in list
	def isInList(list, pos):
		if pos in list:
			return list[pos]
		return None

calHeuristic 函數(shù)簡單得使用了曼哈頓距離,這個后續(xù)可以進(jìn)行優(yōu)化。
getMoveCost 函數(shù)根據(jù)是否是斜向移動來計算消耗(斜向就是2的開根號,約等于1.4)

	# imporve the heuristic distance more precisely in future
	def calHeuristic(pos, dest):
		return abs(dest.x - pos[0]) + abs(dest.y - pos[1])
		
	def getMoveCost(location, pos):
		if location.x != pos[0] and location.y != pos[1]:
			return 1.4
		else:
			return 1

代碼的初始化

可以調(diào)整地圖的長度,寬度和不可移動節(jié)點的數(shù)目。
可以調(diào)整開始節(jié)點和目標(biāo)節(jié)點的取值范圍。

WIDTH = 10
HEIGHT = 10
BLOCK_NUM = 15
map = Map(WIDTH, HEIGHT)
map.createBlock(BLOCK_NUM)
map.showMap()

source = map.generatePos((0,WIDTH//3),(0,HEIGHT//3))
dest = map.generatePos((WIDTH//2,WIDTH-1),(HEIGHT//2,HEIGHT-1))
print("source:", source)
print("dest:", dest)
AStarSearch(map, source, dest)
map.showMap()

執(zhí)行的效果圖如下,第一個表示隨機生成的地圖,值為1的節(jié)點表示不能移動到該節(jié)點。
第二個圖中值為2的節(jié)點表示找到的路徑。

完整代碼

使用python3.7編譯

from random import randint

class SearchEntry():
	def __init__(self, x, y, g_cost, f_cost=0, pre_entry=None):
		self.x = x
		self.y = y
		# cost move form start entry to this entry
		self.g_cost = g_cost
		self.f_cost = f_cost
		self.pre_entry = pre_entry
	
	def getPos(self):
		return (self.x, self.y)

class Map():
	def __init__(self, width, height):
		self.width = width
		self.height = height
		self.map = [[0 for x in range(self.width)] for y in range(self.height)]
	
	def createBlock(self, block_num):
		for i in range(block_num):
			x, y = (randint(0, self.width-1), randint(0, self.height-1))
			self.map[y][x] = 1
	
	def generatePos(self, rangeX, rangeY):
		x, y = (randint(rangeX[0], rangeX[1]), randint(rangeY[0], rangeY[1]))
		while self.map[y][x] == 1:
			x, y = (randint(rangeX[0], rangeX[1]), randint(rangeY[0], rangeY[1]))
		return (x , y)

	def showMap(self):
		print("+" * (3 * self.width + 2))

		for row in self.map:
			s = '+'
			for entry in row:
				s += ' ' + str(entry) + ' '
			s += '+'
			print(s)

		print("+" * (3 * self.width + 2))
	

def AStarSearch(map, source, dest):
	def getNewPosition(map, locatioin, offset):
		x,y = (location.x + offset[0], location.y + offset[1])
		if x  0 or x >= map.width or y  0 or y >= map.height or map.map[y][x] == 1:
			return None
		return (x, y)
		
	def getPositions(map, location):
		# use four ways or eight ways to move
		offsets = [(-1,0), (0, -1), (1, 0), (0, 1)]
		#offsets = [(-1,0), (0, -1), (1, 0), (0, 1), (-1,-1), (1, -1), (-1, 1), (1, 1)]
		poslist = []
		for offset in offsets:
			pos = getNewPosition(map, location, offset)
			if pos is not None:			
				poslist.append(pos)
		return poslist
	
	# imporve the heuristic distance more precisely in future
	def calHeuristic(pos, dest):
		return abs(dest.x - pos[0]) + abs(dest.y - pos[1])
		
	def getMoveCost(location, pos):
		if location.x != pos[0] and location.y != pos[1]:
			return 1.4
		else:
			return 1

	# check if the position is in list
	def isInList(list, pos):
		if pos in list:
			return list[pos]
		return None
	
	# add available adjacent positions
	def addAdjacentPositions(map, location, dest, openlist, closedlist):
		poslist = getPositions(map, location)
		for pos in poslist:
			# if position is already in closedlist, do nothing
			if isInList(closedlist, pos) is None:
				findEntry = isInList(openlist, pos)
				h_cost = calHeuristic(pos, dest)
				g_cost = location.g_cost + getMoveCost(location, pos)
				if findEntry is None :
					# if position is not in openlist, add it to openlist
					openlist[pos] = SearchEntry(pos[0], pos[1], g_cost, g_cost+h_cost, location)
				elif findEntry.g_cost > g_cost:
					# if position is in openlist and cost is larger than current one,
					# then update cost and previous position
					findEntry.g_cost = g_cost
					findEntry.f_cost = g_cost + h_cost
					findEntry.pre_entry = location
	
	# find a least cost position in openlist, return None if openlist is empty
	def getFastPosition(openlist):
		fast = None
		for entry in openlist.values():
			if fast is None:
				fast = entry
			elif fast.f_cost > entry.f_cost:
				fast = entry
		return fast

	openlist = {}
	closedlist = {}
	location = SearchEntry(source[0], source[1], 0.0)
	dest = SearchEntry(dest[0], dest[1], 0.0)
	openlist[source] = location
	while True:
		location = getFastPosition(openlist)
		if location is None:
			# not found valid path
			print("can't find valid path")
			break;
		
		if location.x == dest.x and location.y == dest.y:
			break
		
		closedlist[location.getPos()] = location
		openlist.pop(location.getPos())
		addAdjacentPositions(map, location, dest, openlist, closedlist)
		
	#mark the found path at the map
	while location is not None:
		map.map[location.y][location.x] = 2
		location = location.pre_entry	

	
WIDTH = 10
HEIGHT = 10
BLOCK_NUM = 15
map = Map(WIDTH, HEIGHT)
map.createBlock(BLOCK_NUM)
map.showMap()

source = map.generatePos((0,WIDTH//3),(0,HEIGHT//3))
dest = map.generatePos((WIDTH//2,WIDTH-1),(HEIGHT//2,HEIGHT-1))
print("source:", source)
print("dest:", dest)
AStarSearch(map, source, dest)
map.showMap()

到此這篇關(guān)于python實現(xiàn)A*尋路算法的文章就介紹到這了,更多相關(guān)python A*尋路算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python3 A*尋路算法實現(xiàn)方式
  • python實現(xiàn)Dijkstra靜態(tài)尋路算法
  • python 實現(xiàn)A*算法的示例代碼

標(biāo)簽:南寧 六盤水 聊城 撫州 揚州 牡丹江 迪慶 楊凌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實現(xiàn)A*尋路算法》,本文關(guān)鍵詞  python,實現(xiàn),尋路,算法,python,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python實現(xiàn)A*尋路算法》相關(guān)的同類信息!
  • 本頁收集關(guān)于python實現(xiàn)A*尋路算法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    少妇精品视频一区二区免费看| 亚洲1卡2卡3卡4卡乱码精品| 国产精品福利电影| 亚洲一区二区三区毛片| 欧美色视频一区二区三区在线观看| 日韩视频免费直播| 欧美理论片在线播放| 免费看日本黄色片| 亚洲视频高清| 国产精品无码2021在线观看| 亚洲一区二区在线免费| 欧洲在线/亚洲| 日韩精品一区二区三区在线观看| 亚洲一级免费毛片| 亚洲va电影大全| 在线成人动漫av| 怡红院av久久久久久久| 在线免费视频a| 日本不卡二区高清三区| 国产亚洲精品久久久久婷婷瑜伽| 国产69精品久久久久久久久久| 久久人人看视频| 亚洲999一在线观看www| 国产 欧美 日韩 在线| 三上悠亚av一区二区三区| 区一区二区三区中文字幕| 亚洲人成在线电影| 婷婷在线视频观看| 成人免费观看av| 国产一区二区免费电影| 久久久精品999| 一区二区三区三区在线| 午夜精品美女自拍福到在线| 在线免费观看电影网站入口| 亚洲综合视频在线| 国产精品乱人伦| 久久免费视频66| 亚洲女同志freevdieo| www视频在线免费观看| 超碰97国产精品人人cao| 亚洲三级网站| 精品免费99久久| 欧美老肥妇做.爰bbww| 神马午夜久久| 亚洲欧洲免费无码| 国产伦精品一区二区三区视频女| 亚洲一区二区三区观看| 亚洲一区二区中文在线| 国产97在线观看| 欧美日韩激情视频在线观看| 一区二区三区日| 亚洲欧美日韩直播| 青青草原av在线| 久久国产精品99久久人人澡| 男人操女人逼免费视频| 午夜一级电影| 欧美日韩国产另类一区| 久久伊人91精品综合网站| 色综合久久88色综合天天6| 日韩欧美一区二区三区在线视频| 国产成人综合视频| 动漫av网站免费观看| 网友自拍亚洲| 久久99久国产精品黄毛片入口| 免费成人av在线播放| 国产理论在线| 最新日韩在线| 久久国产精品第一页| 欧美国产97人人爽人人喊| 特级西西444www高清大视频| 精品久久久久一区二区| 亚洲女子a中天字幕| 亚洲 欧美 日韩在线| 久草影视在线| 国产精品第二十页| 中文字幕在线天堂| 美女av一区二区三区| 亚洲一区二区三| 国产欧美日韩精品一区| 337p粉嫩色噜噜噜大肥臀| 丝袜在线观看| 国产高清一区二区| 五月天久久网站| 国产精品日日夜夜| 欧美午夜性色大片在线观看| 国产香蕉精品视频一区二区三区| 日韩欧美一级二级三级久久久| 午夜精品久久久久久久久久蜜桃| av在线免费观看网| 丝袜国产免费观看| 一区二区精品视频| 欧美黄页免费| 国产日本视频| 激情综合色综合久久综合| 亚洲精华国产| av免费在线一区| 一区二区三区中文字幕电影| 成人精品视频一区二区三区尤物| 波多野结衣在线一区| 欧美精品久久久久久久久25p| 国产在线精品日韩| 麻豆视频免费在线播放| 免费在线观看av网址| 色综合久久网| 永久免费看mv网站入口| 三级黄色的网站| 在线视频观看你懂的| 国产精品高潮视频| 自拍欧美日韩| 日本三级黄色网址| 亚洲麻豆视频| 日本免费视频www| 五月天六月丁香| 国产黑人绿帽在线第一区| 男人打飞机网站| 欧美一级片一区| 97影院秋霞午夜在线观看| 91免费看片在线观看| 电影亚洲一区| 国产乱人伦真实精品视频| a级黄色小视频| 国产精品一区二区免费视频| 国产一区二区三区成人| 精品国产乱码久久久久久1区2区| gogogo免费视频观看亚洲一| 福利片一区二区| 亚洲精品720p| 亚洲第一天堂网| 国内精品不卡一区二区三区| 亚洲一区二区三区精品在线| 国户精品久久久久久久久久久不卡| 久久99精品国产自在现线小黄鸭| 国产大屁股喷水视频在线观看| 一区二区三区四区在线看| 亚洲欧美国产日韩中文字幕| 亚洲av电影一区| 亚洲色图激情小说| 亚洲精品91天天久久人人| 99国产精品国产精品久久| 成人亚洲欧美一区二区三区| 中文字幕高清在线播放| 精品在线视频免费| 国产精品扒开腿做爽爽爽视频| 欧美国产日韩电影| 催眠调教后宫乱淫校园| 日韩三级中文字幕| 欧美一级理论性理论a| 天堂8在线天堂资源bt| 国产av一区二区三区传媒| 色播亚洲婷婷| 日本成人片在线| 亚洲第一色在线| 欧美电影免费观看高清完整| 日韩pacopacomama| 九九热在线视频观看这里只有精品| 中文字幕人妻一区二| 国产欧美视频在线观看| 高清免费电影在线观看| 日日夜夜免费精品视频| 99成人免费视频| 黑人极品videos精品欧美裸| 亚洲国产高清不卡| 国产精品美女久久久久久2018| 国产亚洲人成a在线v网站| 自由日本语热亚洲人| 亚洲精品一区二区三区四区五区| 在线免费观看成人短视频| 久久精品道一区二区三区| 国产真实夫妇交换视频| 久久影院资源网| 亚洲精品高清在线观看| 全部孕妇毛片丰满孕妇孕| 久久频这里精品99香蕉| 国产亚洲精品美女久久久久| 91极品尤物在线播放国产| 国产99在线| 三级网站免费看| 国自产精品手机在线观看视频| 欧美丝袜美腿| 水莓100国产免费av在线播放| 91福利精品第一导航| 成人看片人aa| 欧洲精品中文字幕| 国产精品美女毛片真酒店| 处破女av一区二区| 免费成人黄色网| 精品久久99| 18深夜视频在线观看| 久久久久国产免费免费| 欧美伦理视频网站| 青娱乐在线视频免费观看| 91免费欧美精品| 欧洲免费av| 91麻豆国产语对白在线观看| 亚洲在线精品视频| 精品人妻久久久久一区二区三区| 很黄很色网站| 成人激情电影在线| 青青在线视频免费观看| 欧美成人免费视频| 国产自偷自偷免费一区| 国产精品国产自产拍高清av水多| 久久精品国产亚洲7777| 国产亚洲成人精品| 综合激情丁香| 中文字幕在线视频免费观看| 国产麻豆精品| 一区二区三区欧美视频| 欧美高清一区| 爱情岛论坛亚洲品质自拍视频网站| 日本一级理论片在线大全| 亚洲精品久久久久久久蜜桃| 日本黄色激情视频| 538在线精品| 青青草国产精品97视觉盛宴| 波多野结衣在线高清| 在线电影中文字幕| 亚洲理论电影| 春色成人在线视频| 久久夜色精品国产噜噜av| 97成人精品区在线播放| 男人日女人网站| 手机免费av片| 免费在线毛片| 另类视频在线| 亚洲免费福利视频| 亚洲精品网站在线播放gif| 国产aa精品| 亚洲青涩在线| 深田えいみ中文字幕99久久| 妞干网免费在线视频| 最近中文字幕在线免费观看| 欧美激情一级二级三级在线视频| 午夜小视频在线| 精品91自产拍在线观看一区| 5g影院5g电影天天爽快| 欧美国产一区二区三区| 在线免费看黄网站| 国产视频一二三区| yiren22综合网成人| 欧美办公室脚交xxxx| 一区二区在线免费看| 亚洲精品黄色| 看全色黄大色黄女片18| 亚洲福利一二三区| 一本色道a无线码一区v| 日韩成人动漫在线观看| 久久er99热精品一区二区| 欧美日韩成人在线一区| 亚洲一区二区不卡免费| 欧美高清视频在线| gogogo高清在线观看免费完整版| 日韩中字在线| 波多野结衣视频在线观看| 99视频国产精品| 久草视频福利在线| 欧美日韩一区二区综合| heyzo欧美激情| 香蕉视频xxxx| 精品爆乳一区二区三区无码av| 日本五十肥熟交尾| 翡翠波斯猫1977年美国| 99精品久久免费看蜜臀剧情介绍| 欧美午夜性色大片在线观看| 欧美啪啪一区| 无码人妻aⅴ一区二区三区玉蒲团| 一区二区电影在线观看| 日韩欧美国产一区二区在线播放| 亚洲成av人片观看| 色婷婷综合久久久中文一区二区| 极品美女一区| 妺妺窝人体色www聚色窝仙踪| 最近中文字幕mv免费高清电影| 国产一级片中文字幕| 成人在线黄色| 免费看av的网址| 人成在线视频| 亚洲精品一区二区三区中文字幕| 欧美激情欧美激情在线五月| 久久精品播放| 色视频www在线播放国产| 美国精品一区二区| 四虎国产精品成人免费4hu| 午夜免费一区| 亚洲国内精品| 懂色一区二区三区| 中文字幕第12页| 国产精品.xx视频.xxtv| 久久av一区二区三区亚洲| 国产成人综合欧美精品久久| 香蕉视频亚洲一级| 九九久久久久午夜精选| 免费一区二区三区四区| 国产免费久久久久| 日本黄色片视频| 精品一区二区三区影院在线午夜| 综合色婷婷一区二区亚洲欧美国产| 欧美国产国产综合| 成人国产精品日本在线| 在线播放国产一区中文字幕剧情欧美| 日韩特级毛片| 中文字幕42页丝袜| 在线电影中文日韩| 久久在线视频精品| 久久久久女教师免费一区| 亚洲一区二区三区成人在线视频精品| shkd中文字幕久久在线观看| 色综合色狠狠综合色| 性欧美videos粗暴| 综合色婷婷一区二区亚洲欧美国产| 国产午夜精品一区理论片| 欧美精品成人一区二区在线观看| 国产成人麻豆免费观看| 亚洲一区二区在线观| 欧美乱妇一区二区三区不卡视频| 国产精品日本精品| 国产成人av| 欧洲午夜精品久久久| 国语自产精品视频在免费| 国产又白又嫩又爽又黄| 二区三区在线| 国产一区二区调教| 亚洲自拍偷拍av| 国产又黄又大又爽| 天堂√在线观看一区二区| 黄网免费入口| 成人高清在线观看免费| 亚洲天堂中文字幕在线观看|