亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 蟻群算法 c實現.txt

?? 關于蟻群算法的c實現
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
http://www.zxbc.cn/html/cjjhs/2907581315335.html

算法解釋:

程序開始運行,螞蟻們開始從窩里出動了,尋找食物;他們會順著屏幕爬滿整個畫面,直到找到食物再返回窩。

其中,‘F’點表示食物,‘H’表示窩,白色塊表示障礙物,‘+’就是螞蟻了。
 

預期的結果:
    各個螞蟻在沒有事先告訴他們食物在什么地方的前提下開始尋找食物。當一只找到食物以后,它會向環境釋放一種信息素,吸引其他的螞蟻過來,這樣越來越多的螞蟻會找到食物!有些螞蟻并沒有象其它螞蟻一樣總重復同樣的路,他們會另辟蹊徑,如果令開辟的道路比原來的其他道路更短,那么,漸漸,更多的螞蟻被吸引到這條較短的路上來。最后,經過一段時間運行,可能會出現一條最短的路徑被大多數螞蟻重復著。

原理:
  為什么小小的螞蟻能夠找到食物?他們具有智能么?設想,如果我們要為螞蟻設計一個人工智能的程序,那么這個程序要多么復雜呢?首先,你要讓螞蟻能夠避開障礙物,就必須根據適當的地形給它編進指令讓他們能夠巧妙的避開障礙物,其次,要讓螞蟻找到食物,就需要讓他們遍歷空間上的所有點;再次,如果要讓螞蟻找到最短的路徑,那么需要計算所有可能的路徑并且比較它們的大小,而且更重要的是,你要小心翼翼的編程,因為程序的錯誤也許會讓你前功盡棄。這是多么不可思議的程序!太復雜了,恐怕沒人能夠完成這樣繁瑣冗余的程序。
   然而,事實并沒有你想得那么復雜,上面這個程序每個螞蟻的核心程序編碼不過100多行!為什么這么簡單的程序會讓螞蟻干這樣復雜的事情?答案是:簡單規則的涌現。事實上,每只螞蟻并不是像我們想象的需要知道整個世界的信息,他們其實只關心很小范圍內的眼前信息,而且根據這些局部信息利用幾條簡單的規則進行決策,這樣,在蟻群這個集體里,復雜性的行為就會凸現出來。這就是人工生命、復雜性科學解釋的規律!那么,這些簡單規則是什么呢?下面詳細說明:
1、范圍:
    螞蟻觀察到的范圍是一個方格世界,螞蟻有一個參數為速度半徑(一般是3),那么它能觀察到的范圍就是3*3個方格世界,并且能移動的距離也在這個范圍之內。
2、環境:
    螞蟻所在的環境是一個虛擬的世界,其中有障礙物,有別的螞蟻,還有信息素,信息素有兩種,一種是找到食物的螞蟻灑下的食物信息素,一種是找到窩的螞蟻灑下的窩的信息素。每個螞蟻都僅僅能感知它范圍內的環境信息。環境以一定的速率讓信息素消失。
3、覓食規則:
    在每只螞蟻能感知的范圍內尋找是否有食物,如果有就直接過去。否則看是否有信息素,并且比較在能感知的范圍內哪一點的信息素最多,這樣,它就朝信息素多的地方走,并且每只螞蟻多會以小概率犯錯誤,從而并不是往信息素最多的點移動。螞蟻找窩的規則和上面一樣,只不過它對窩的信息素做出反應,而對食物信息素沒反應。
4、移動規則: 
    每只螞蟻都朝向信息素最多的方向移,并且,當周圍沒有信息素指引的時候,螞蟻會按照自己原來運動的方向慣性的運動下去,并且,在運動的方向有一個隨機的小的擾動。為了防止螞蟻原地轉圈,它會記住最近剛走過了哪些點,如果發現要走的下一點已經在最近走過了,它就會盡量避開。


5、避障規則:
    如果螞蟻要移動的方向有障礙物擋住,它會隨機的選擇另一個方向,并且有信息素指引的話,它會按照覓食的規則行為。 
7、播撒信息素規則:
    每只螞蟻在剛找到食物或者窩的時候撒發的信息素最多,并隨著它走遠的距離,播撒的信息素越來越少。

    根據這幾條規則,螞蟻之間并沒有直接的關系,但是每只螞蟻都和環境發生交互,而通過信息素這個紐帶,實際上把各個螞蟻之間關聯起來了。比如,當一只螞蟻找到了食物,它并沒有直接告訴其它螞蟻這兒有食物,而是向環境播撒信息素,當其它的螞蟻經過它附近的時候,就會感覺到信息素的存在,進而根據信息素的指引找到了食物。

問題:
     說了這么多,螞蟻究竟是怎么找到食物的呢?
    在沒有螞蟻找到食物的時候,環境沒有有用的信息素,那么螞蟻為什么會相對有效的找到食物呢?這要歸功于螞蟻的移動規則,尤其是在沒有信息素時候的移動規則。首先,它要能盡量保持某種慣性,這樣使得螞蟻盡量向前方移動(開始,這個前方是隨機固定的一個方向),而不是原地無謂的打轉或者震動;其次,螞蟻要有一定的隨機性,雖然有了固定的方向,但它也不能像粒子一樣直線運動下去,而是有一個隨機的干擾。這樣就使得螞蟻運動起來具有了一定的目的性,盡量保持原來的方向,但又有新的試探,尤其當碰到障礙物的時候它會立即改變方向,這可以看成一種選擇的過程,也就是環境的障礙物讓螞蟻的某個方向正確,而其他方向則不對。這就解釋了為什么單個螞蟻在復雜的諸如迷宮的地圖中仍然能找到隱蔽得很好的食物。
     當然,在有一只螞蟻找到了食物的時候,其他螞蟻會沿著信息素很快找到食物的。

     螞蟻如何找到最短路徑的?這一是要歸功于信息素,另外要歸功于環境,具體說是計算機時鐘。信息素多的地方顯然經過這里的螞蟻會多,因而會有更多的螞蟻聚集過來。假設有兩條路從窩通向食物,開始的時候,走這兩條路的螞蟻數量同樣多(或者較長的路上螞蟻多,這也無關緊要)。當螞蟻沿著一條路到達終點以后會馬上返回來,這樣,短的路螞蟻來回一次的時間就短,這也意味著重復的頻率就快,因而在單位時間里走過的螞蟻數目就多,灑下的信息素自然也會多,自然會有更多的螞蟻被吸引過來,從而灑下更多的信息素……;而長的路正相反,因此,越來越多地螞蟻聚集到較短的路徑上來,最短的路徑就近似找到了。也許有人會問局部最短路徑和全局最短路的問題,實際上螞蟻逐漸接近全局最短路的,為什么呢?這源于螞蟻會犯錯誤,也就是它會按照一定的概率不往信息素高的地方走而另辟蹊徑,這可以理解為一種創新,這種創新如果能縮短路途,那么根據剛才敘述的原理,更多的螞蟻會被吸引過來。


引申
    跟著螞蟻的蹤跡,你找到了什么?通過上面的原理敘述和實際操作,我們不難發現螞蟻之所以具有智能行為,完全歸功于它的簡單行為規則,而這些規則綜合起來具有下面兩個方面的特點:
1、多樣性
2、正反饋
    多樣性保證了螞蟻在覓食的時候不置走進死胡同而無限循環,正反饋機制則保證了相對優良的信息能夠被保存下來。我們可以把多樣性看成是一種創造能力,而正反饋是一種學習強化能力。正反饋的力量也可以比喻成權威的意見,而多樣性是打破權威體現的創造性,正是這兩點小心翼翼的巧妙結合才使得智能行為涌現出來了。

    
 引申來講,大自然的進化,社會的進步、人類的創新實際上都離不開這兩樣東西,多樣性保證了系統的創新能力,正反饋保證了優良特性能夠得到強化,兩者要恰到好處的結合。如果多樣性過剩,也就是系統過于活躍,這相當于螞蟻會過多的隨機運動,它就會陷入混沌狀態;而相反,多樣性不夠,正反饋機制過強,那么系統就好比一潭死水。這在蟻群中來講就表現為,螞蟻的行為過于僵硬,當環境變化了,螞蟻群仍然不能適當的調整。
     既然復雜性、智能行為是根據底層規則涌現的,既然底層規則具有多樣性和正反饋特點,那么也許你會問這些規則是哪里來的?多樣性和正反饋又是哪里來的?我本人的意見:規則來源于大自然的進化。而大自然的進化根據剛才講的也體現為多樣性和正反饋的巧妙結合。而這樣的巧妙結合又是為什么呢?為什么在你眼前呈現的世界是如此栩栩如生呢?答案在于環境造就了這一切,之所以你看到栩栩如生的世界,是因為那些不能夠適應環境的多樣性與正反饋的結合都已經死掉了,被環境淘汰了!

參數說明:
最大信息素:螞蟻在一開始擁有的信息素總量,越大表示程序在較長一段時間能夠存在信息素。信息素消減的速度:隨著時間的流逝,已經存在于世界上的信息素會消減,這個數值越大,那么消減的越快。
錯誤概率表示這個螞蟻不往信息素最大的區域走的概率,越大則表示這個螞蟻越有創新性。
速度半徑表示螞蟻一次能走的最大長度,也表示這個螞蟻的感知范圍。
記憶能力表示螞蟻能記住多少個剛剛走過點的坐標,這個值避免了螞蟻在本地打轉,停滯不前。而這個值越大那么整個系統運行速度就慢,越小則螞蟻越容易原地轉圈。//禁忌表

源代碼如下:

/*ant.c*/

#define SPACE 0x20
#define ESC 0x1b
#define ANT_CHAR_EMPTY '+'
#define ANT_CHAR_FOOD 153
#define HOME_CHAR 'H'
#define FOOD_CHAR 'F'
#define FOOD_CHAR2 'f'
#define FOOD_HOME_COLOR 12
#define BLOCK_CHAR 177

#define MAX_ANT 50
#define INI_SPEED 3
#define MAXX 80
#define MAXY 23
#define MAX_FOOD 10000
#define TARGET_FOOD 200
#define MAX_SMELL 5000
#define SMELL_DROP_RATE 0.05
#define ANT_ERROR_RATE 0.02
#define ANT_EYESHOT 3
#define SMELL_GONE_SPEED 50
#define SMELL_GONE_RATE 0.05
#define TRACE_REMEMBER 50
#define MAX_BLOCK 100

#define NULL 0
#define UP 1
#define DOWN 2
#define LEFT 3
#define RIGHT 4
#define SMELL_TYPE_FOOD 0
#define SMELL_TYPE_HOME 1

#include "stdio.h"
#include "conio.h"
#include "dos.h"
#include "stdlib.h"
#include "dos.h"
#include "process.h"
#include "ctype.h"
#include "math.h"

void WorldInitial(void);
void BlockInitial(void);
void CreatBlock(void);
void SaveBlock(void);
void LoadBlock(void);
void HomeFoodInitial(void);
void AntInitial(void);
void WorldChange(void);
void AntMove(void);
void AntOneStep(void);
void DealKey(char key);
void ClearSmellDisp(void);
void DispSmell(int type);
int AntNextDir(int xxx,int yyy,int ddir);
int GetMaxSmell(int type,int xxx,int yyy,int ddir);

int IsTrace(int xxx,int yyy);
int MaxLocation(int num1,int num2,int num3);
int CanGo(int xxx,int yyy,int ddir);
int JudgeCanGo(int xxx,int yyy);
int TurnLeft(int ddir);
int TurnRight(int ddir);
int TurnBack(int ddir);

int MainTimer(void);
char WaitForKey(int secnum);
void DispPlayTime(void);
int TimeUse(void);
void HideCur(void);
void ResetCur(void);

/* ---------------  */
struct HomeStruct
{
    int xxx,yyy;
    int amount;
    int TargetFood;
}home;

struct FoodStruct
{
    int xxx,yyy;
    int amount; 
}food;

struct AntStruct
{
    int xxx,yyy;
    int dir;
    int speed;
    int SpeedTimer;
    int food;
    int SmellAmount[2];
    int tracex[TRACE_REMEMBER];
    int tracey[TRACE_REMEMBER];
    int TracePtr;
    int IQ;
}ant[MAX_ANT];
int AntNow;
int timer10ms;
struct time starttime,endtime;
int Smell[2][MAXX+1][MAXY+1];
int block[MAXX+1][MAXY+1];
int SmellGoneTimer;
int SmellDispFlag;
int CanFindFood;
int HardtoFindPath;

/* ----- Main -------- */
void main(void)
{
    char KeyPress;
    int tu;
    
    clrscr();
    HideCur();
    WorldInitial();
    do
    {
        timer10ms = MainTimer();
        if(timer10ms) AntMove();
        if(timer10ms) WorldChange();
        tu = TimeUse();
        if(tu>=60&&!CanFindFood)
        {
            gotoxy(1,MAXY+1);
            printf("Can not find food, maybe a block world.");
            WaitForKey(10);
            WorldInitial(); 
        }
        if(tu>=180&&home.amount<100&&!HardtoFindPath)
        {
            gotoxy(1,MAXY+1);
            printf("God! it is so difficult to find a path.");


            if(WaitForKey(10)==0x0d) WorldInitial();
            else
         {
                HardtoFindPath = 1;
                gotoxy(1,MAXY+1);
                printf("                                       ");   
         }
        }
        if(home.amount>=home.TargetFood)
        {
            gettime(&endtime);
            KeyPress = WaitForKey(60);
            DispPlayTime();
            WaitForKey(10);
            WorldInitial();
        }
        else if(kbhit())
        {
            KeyPress = getch();
            DealKey(KeyPress);
        }
        else KeyPress = NULL;
    }
    while(KeyPress!=ESC);
    gettime(&endtime);
    DispPlayTime();
    WaitForKey(10);
    clrscr();
    ResetCur(); 
}

/* ------ general sub process ----------- */
int MainTimer(void)
/* output: how much 10ms have pass from last time call this process */
{
    static int oldhund,oldsec;
    struct  time t;
    int timeuse;

    gettime(&t);
    timeuse = 0;
    if(t.ti_hund!=oldhund)
    {
        if(t.ti_sec!=oldsec)


        {
            timeuse+=100;
            oldsec = t.ti_sec;
        }
        timeuse+=t.ti_hund-oldhund;
        oldhund = t.ti_hund;
    }
    else timeuse = 0;
    return (timeuse);
}

char WaitForKey(int secnum)
/* funtion: if have key in, exit immediately, else wait 'secnum' senconds then exit 
   input: secnum -- wait this senconds, must < 3600 (1 hour)
   output: key char, if no key in(exit when timeout), return NULL */
{
    int secin,secnow;
    int minin,minnow;
    int hourin,hournow;
    int secuse;
    struct  time t;

    gettime(&t);
    secin = t.ti_sec;
    minin = t.ti_min;
    hourin = t.ti_hour;
    
    do
    {
        if(kbhit()) return(getch());
        gettime(&t);
        secnow = t.ti_sec;
        minnow = t.ti_min;
        hournow = t.ti_hour;

        if(hournow!=hourin) minnow+=60;
        if(minnow>minin) secuse = (minnow-1-minin) + (secnow+60-secin);
        else secuse = secnow - secin;
        
        /* counting error check */
        if(secuse<0)
        {
            gotoxy(1,MAXY+1);
            printf("Time conuting error, any keyto exit...");
            getch();
            exit(3);
        }
    }
    while(secuse<=secnum);
    return (NULL);
}

void DispPlayTime(void)
{
    int ph,pm,ps;
    
    ph = endtime.ti_hour - starttime.ti_hour;


    pm = endtime.ti_min - starttime.ti_min;
    ps = endtime.ti_sec - starttime.ti_sec;
    
    if(ph<0) ph+=24;
    if(pm<0) { ph--; pm+=60; }
    if(ps<0) { pm--; ps+=60; }
    
    gotoxy(1,MAXY+1);
    printf("Time use: %d hour- %d min- %d sec ",ph,pm,ps);
}

int TimeUse(void)
{
    int ph,pm,ps;
    
    gettime(&endtime);
    ph = endtime.ti_hour - starttime.ti_hour;
    pm = endtime.ti_min - starttime.ti_min;
    ps = endtime.ti_sec - starttime.ti_sec;
    
    if(ph<0) ph+=24;
    if(pm<0) { ph--; pm+=60; }
    if(ps<0) { pm--; ps+=60; }
    
    return(ps+(60*(pm+60*ph)));
}


void HideCur(void)
{
    union REGS regs0;
    regs0.h.ah=1;
    regs0.h.ch=0x30;
    regs0.h.cl=0x31;
    int86(0x10,&regs0,&regs0);
}

void ResetCur(void)
{
    union REGS regs0;
    regs0.h.ah=1;
    regs0.h.ch=0x06;
    regs0.h.cl=0x07;
    int86(0x10,&regs0,&regs0);
}

/* ------------ main ANT programe ------------- */
void WorldInitial(void)
{
    int k,i,j;
    randomize();
    clrscr();
    HomeFoodInitial();
    for(AntNow=0;AntNow<MAX_ANT;AntNow++)
    {
        AntInitial();
    } /* of for AntNow */;
    
    BlockInitial();
    for(k=0;k<=1;k++)
    /* SMELL TYPE FOOD and HOME */
        for(i=0;i<=MAXX;i++)
            for(j=0;j<=MAXY;j++)
                Smell[k][i][j] = 0;
    SmellGoneTimer = 0;
    gettime(&starttime);
    SmellDispFlag = 0;
    CanFindFood = 0;
    HardtoFindPath = 0;
}

void BlockInitial(void)
{
    int i,j;
    int bn;
    
    for(i=0;i<=MAXX;i++)
        for(j=0;j<=MAXY;j++)


            block[i][j] = 0;
    
    bn = 1+ MAX_BLOCK/2 + random(MAX_BLOCK/2);
    for(i=0;i<=bn;i++) CreatBlock();
}

void CreatBlock(void)
{
    int x1,y1,x2,y2;
    int dx,dy;
    int i,j;
    
    x1 = random(MAXX)+1;
    y1 = random(MAXY)+1;
    
    dx = random(MAXX/10)+1;
    dy = random(MAXY/10)+1;
    
    x2 = x1+dx;
    y2 = y1+dy;
    
    if(x2>MAXX) x2 = MAXX;
    if(y2>MAXY) y2 = MAXY;
    
    if(food.xxx>=x1&&food.xxx<=x2&&food.yyy>=y1&&food.yyy<=y2) return;
    if(home.xxx>=x1&&home.xxx<=x2&&home.yyy>=y1&&home.yyy<=y2) return;
    
    for(i=x1;i<=x2;i++)
        for(j=y1;j<=y2;j++)
        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲动漫精品| 成人av集中营| 亚洲精品在线观看视频| 老司机精品视频线观看86| 久久欧美中文字幕| 成人国产一区二区三区精品| 亚洲欧洲日产国产综合网| 日本韩国一区二区| 日本在线不卡一区| 久久午夜色播影院免费高清| 成人午夜电影小说| 亚洲高清免费一级二级三级| 日韩一区二区在线观看| 国产成人综合在线观看| 久久久久高清精品| 91在线观看美女| 日韩综合小视频| 日本一区二区高清| 欧美日韩一区成人| 国产精品白丝jk白祙喷水网站| 国产精品进线69影院| 91精品综合久久久久久| 成熟亚洲日本毛茸茸凸凹| 亚洲超丰满肉感bbw| 久久久久久久久久久黄色| 91精品福利在线| 喷白浆一区二区| 亚洲色图20p| 精品欧美乱码久久久久久 | 午夜精品123| 国产亚洲一区二区在线观看| 在线视频观看一区| 精品亚洲免费视频| 亚洲成人精品在线观看| 国产女同性恋一区二区| 欧美肥胖老妇做爰| 成人福利在线看| 久久精品国产99| 亚洲丶国产丶欧美一区二区三区| 久久久久久一二三区| 欧美理论片在线| 色视频成人在线观看免| 激情综合五月天| 五月天中文字幕一区二区| 欧美激情自拍偷拍| 精品欧美乱码久久久久久| 欧美亚洲国产一区二区三区va| 国产成人综合网| 精品一区二区三区在线视频| 亚洲成a人片综合在线| 亚洲日本韩国一区| 国产欧美一区二区精品仙草咪| 欧美高清精品3d| 欧美色电影在线| 99re8在线精品视频免费播放| 国内精品国产三级国产a久久| 丝袜诱惑亚洲看片| 午夜视黄欧洲亚洲| 一区二区三区四区视频精品免费 | 久久人人超碰精品| 日韩免费成人网| 欧美日产在线观看| 欧美影视一区二区三区| 91免费国产在线观看| a亚洲天堂av| 国产suv精品一区二区6| 激情都市一区二区| 精品影院一区二区久久久| 欧美bbbbb| 精品一区二区久久久| 精品一区二区日韩| 国产在线一区二区| 国内成人精品2018免费看| 黄色精品一二区| 国产在线精品一区二区三区不卡| 麻豆91免费观看| 精久久久久久久久久久| 久久99久久99精品免视看婷婷| 免费高清在线一区| 蜜桃av噜噜一区二区三区小说| 美脚の诱脚舐め脚责91| 国产专区综合网| 粉嫩av一区二区三区粉嫩 | 亚洲美女区一区| 亚洲制服丝袜一区| 日韩经典一区二区| 久久国产成人午夜av影院| 国产一区二区三区免费播放 | 成人av动漫网站| av在线不卡电影| 色天使色偷偷av一区二区| 欧美日韩精品欧美日韩精品一 | 国产福利一区二区三区视频在线 | 奇米精品一区二区三区在线观看一| 美洲天堂一区二卡三卡四卡视频| 老司机精品视频线观看86| 国产福利91精品| 91小视频在线观看| 欧美人伦禁忌dvd放荡欲情| 日韩免费福利电影在线观看| 久久久精品综合| 亚洲欧洲精品一区二区三区不卡| 一区二区三区在线观看视频| 蜜臀va亚洲va欧美va天堂| 极品尤物av久久免费看| 91毛片在线观看| 日韩欧美你懂的| 国产精品国产三级国产a| 午夜精品福利久久久| 国产精品一卡二卡在线观看| 色欧美片视频在线观看在线视频| 91精品中文字幕一区二区三区| 国产欧美视频在线观看| 亚洲激情自拍视频| 久久99精品国产.久久久久久| 国产.精品.日韩.另类.中文.在线.播放| 99国产欧美久久久精品| 欧美一区二区三区在线| 国产精品免费丝袜| 免费成人在线播放| 91视频在线看| 精品国产免费人成电影在线观看四季| 亚洲欧洲一区二区在线播放| 美女尤物国产一区| 91麻豆福利精品推荐| 欧美变态凌虐bdsm| 亚洲一二三四在线观看| 国产激情一区二区三区四区| 欧美久久久久中文字幕| 国产精品久久毛片| 久久se精品一区精品二区| 色婷婷精品久久二区二区蜜臂av | 欧美乱妇15p| 亚洲美女电影在线| 国产sm精品调教视频网站| 91精品国产色综合久久不卡蜜臀 | 天天影视涩香欲综合网| 欧美一区二区三区思思人| 亚洲欧美一区二区不卡| 精品无码三级在线观看视频| 欧美日韩在线电影| 亚洲日本在线天堂| 成人一区二区三区| 欧美精品一区二区三区在线| 午夜精品一区二区三区电影天堂 | 国产真实乱子伦精品视频| 欧洲国内综合视频| 亚洲私人影院在线观看| 丁香天五香天堂综合| 精品成a人在线观看| 日韩av电影一区| 欧美三级电影在线看| 亚洲欧美aⅴ...| 91麻豆精品在线观看| 综合久久综合久久| 成人av网址在线| 国产精品色婷婷久久58| 国产成人av影院| 久久理论电影网| 国产美女精品人人做人人爽| 日韩久久精品一区| 久久精品国产免费| 欧美成va人片在线观看| 精品一区二区三区av| 久久久久久久久久美女| 国产一区在线不卡| 久久久久久久久一| 成人免费视频一区| 国产精品国模大尺度视频| www.一区二区| 亚洲欧美二区三区| 欧美无人高清视频在线观看| 夜夜亚洲天天久久| 欧美久久久一区| 久久电影网电视剧免费观看| 337p粉嫩大胆噜噜噜噜噜91av| 国内不卡的二区三区中文字幕| 国产日韩亚洲欧美综合| 成人av综合在线| 亚洲激情图片qvod| 欧美美女直播网站| 久久99精品国产麻豆婷婷洗澡| 国产视频911| 91女厕偷拍女厕偷拍高清| 亚洲国产精品久久久久婷婷884 | 天堂蜜桃91精品| 欧美成人精品1314www| 国产一区二区三区四区五区入口 | 亚洲一区二区三区四区五区黄| 精品视频一区三区九区| 麻豆极品一区二区三区| 欧美激情一区二区三区四区| 91亚洲精品一区二区乱码| 亚洲超碰精品一区二区| 精品电影一区二区三区 | 在线观看日韩国产| 久久99久国产精品黄毛片色诱| 欧美激情一区二区| 欧洲一区在线电影| 国产综合色产在线精品 |