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

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

?? mat.cpp

?? 隨機搜索法,用于大型復雜優化問題.該方法只支持變量的范圍約束,不支持其它類型的約束.
?? CPP
字號:
// Mat.cpp: implementation of the Mat class.
// 矩陣運算 2006年1月由本人編制,如有任何問題,請聯系xiaofc4395@sina.com
// 所有涉及矩陣運算的首先必須初始化,即要調用 zero函數
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RanMethod.h"
#include "mat.h"
#include "math.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

mat::mat()
{
	row=1;
	col=1;
	p=NULL;
}

mat::~mat()
{
	Freethis();
}

void mat::Freethis()
{
	if (p)
	{
		delete[] p;
		p = NULL;
	}
}

mat::mat(const mat& other)
{
	p=NULL;
	row = other.row;
	col = other.col;
	zero(row,col);
	memcpy(p, other.p, sizeof(double)*row*col);
}

mat::mat(int m,int n,double a[])
{
	Freethis();
	row=int(fabs(m));	col=int(fabs(n));
	int nSize = row*col;
	ASSERT(nSize!=0);
	p = new double[nSize];
	ASSERT(p != NULL);				        	  // 內存分配失敗
	BOOL bad=true;
	if (IsBadReadPtr(p, sizeof(double) * nSize)) bad=false;
	ASSERT(bad);
	for (int i=0;i<nSize;i++)
	{
		p[i]=a[i];
	}
}

void mat::zero(int m, int n)
{
	Freethis();
	row=int(fabs(m));	col=int(fabs(n));
	int nSize = row*col;
	ASSERT(nSize!=0);	
	p = new double[nSize];	
	ASSERT(p != NULL);
	BOOL bad=true;
	if (IsBadReadPtr(p, sizeof(double) * nSize)) bad=false;
	ASSERT(bad);
	memset(p,0, sizeof(double) * nSize);   // 將各元素值置0
}

//------------顯示某個元素-------------
double mat::r(int nRow, int nCol) const
{
	if (nCol <=0 || nCol > col || nRow <= 0 || nRow > row)
		return 0.0;
	if (p != NULL)
		return p[ (nCol-1) +(nRow-1)* col];
	else
		return 0.0;
}

//------------設置某個元素-------------
void mat::set(int nRow, int nCol, double value)
{
	BOOL a1=true;
	if (nCol <= 0 || nCol > col || nRow <= 0 || nRow > row) 
		a1=false;
	ASSERT(a1);
	if (p == NULL) 
		ASSERT(false);	
	p[(nCol-1) +(nRow-1)* col] = value;
}

//------------設置某個元素-------------
void mat::set(int nRow, int nCol, int value1)
{
	double value=double(value1);
	set(nRow, nCol,value);
}

//------------顯示某一行-------------
mat mat::cpr(int m)  const
{
	BOOL a1=true;
	if( (m <= 0) || (m > row) ) a1=false;
	ASSERT(a1);
	if (p == NULL) ASSERT(false);
	mat out;out.zero(1,col);
	for (int i=1;i<=col;i++)
	{
		out.set(1,i,this->r(m,i));
	}
	return out;
}

//------------顯示某一列-------------
mat mat::cpc(int n) const
{
	BOOL a1=true;
	if( (n <= 0) && ( n> col) )  a1=false;
	ASSERT(a1);
	if (p == NULL) 
		ASSERT(false);
	mat out;out.zero(row,1);
	for (int i=1;i<=row;i++)
	{
		out.set(i,1,this->r(i,n));
	}
	return out;
}

//------從第m列開始,顯示從m-n列之間的數據---
mat mat::cpc(int m,int n) const
{
	ASSERT( (m>0 ) && ( m <=n) );
	ASSERT( (n>=m) && ( n <=col) );
	mat out;out.zero(row,n-m+1);
	for (int i=1;i<=(n-m+1);i++)
	{
		mat temp=cpc(i+m-1);
		out.setc(i,temp);
	}
	return out;
}

//--從k列開始顯示一個m*n的矩陣
mat mat::cpc(int k,int m,int n) const
{
	ASSERT( (k>0 ) && ( k<=col));
	ASSERT( (m<=row ) && ((k+n-1)<=col));
	mat out;out.zero(m,n);
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			out.set(i,j,r(i,j+k-1));
		}
	}
	return out;
}

//--從k行開始顯示一個m*n的矩陣
mat mat::cpr(int k,int m,int n) const
{
	ASSERT( (k>0 ) && ( k<=row));
	ASSERT( (n>0 ) && ( n<=col));
	ASSERT( (k<=row ) && ((k+m-1)<=row));
	mat out;out.zero(m,n);
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			out.set(i,j,r(i+k-1,j));
		}
	}
	return out;
}

//--從k行,j列開始顯示一個m*n的矩陣
mat mat::cprc(int k,int j, int m,int n) const
{
	ASSERT( (k>0 ) && ( k<=row));
	ASSERT( (m>0 ) && ( m<=row));
	ASSERT( (j>0 ) && ( j<=col));
	ASSERT( (n>0 ) && ( n<=col));
	ASSERT( (k<=row ) && ((k+m-1)<=row));
	ASSERT( (j<=row ) && ((j+n-1)<=col));
	mat out;out.zero(m,n);
	for(int i=1;i<=m;i++)
	{
		for(int rrr=1;rrr<=n;rrr++)
		{
			out.set(i,rrr,r(i+k-1,rrr+j-1));
		}
	}
	return out;
}

//------------設置某行元素-------------
void mat::setr(int nRow,const mat& b)
{
	BOOL a1=true;
	if (nRow <= 0 || nRow > row) a1=false;
	ASSERT(a1);
	if (p == NULL) ASSERT(false);
	for (int i=1;i<=col;i++)
	{
		set(nRow,i,b.r(1,i));
	}
}

//------------設置某列元素-------------
void mat::setc(int m,const mat& b)
{
	BOOL a1=true;
	if ((m <=0 || m > col)) a1=false;
	ASSERT(a1);
	if (p == NULL) ASSERT(false);
	for (int i=1;i<=row;i++)
	{
		set(i,m,b.r(i,1));
	}
}

//----從第k列開始,設置一個m*n的矩陣
void mat::setm(int k,const mat& b)
{
	int m=b.row;
	int n=b.col;
	ASSERT( k>0);
	ASSERT( (k+n-1)<=col);
	mat pre,after,out;
	if (k==1)
	{
		after=cpc(n+1,col);
		out=b/=after;
	}
	else
	{
		if (k+n<=col)
		{
			pre=cpc(1,k-1);
			after=cpc(k+n,col);
			out=pre/=b/=after;
		}
		else
		{
			pre=cpc(1,k-1);
			out=pre/=b;
		}
	}
	zero(out.row,out.col);
	memcpy(p, out.p, sizeof(double)*row*col);
}

//-------------轉置-------------------
mat mat::T() const
{
	mat out; out.zero(col,row);
	for (int i=1;i<=col;i++)
	{
		for (int j=1;j<=row;j++)
		{
			out.set(i,j,this->r(j,i));			
		}
	}
	return out;
}

//-------------單位陣----------------
void mat::eyemat(int n)
{
	zero(n,n);
	for (int i=1;i<=n;i++)
	{ 
		for (int j=1;j<=n;j++)
		{
			if (i==j)
				set(i,j,1.0);				
			else
				set(i,j,0.0);
		}
	}
}

//-------------付值----------------
mat& mat::operator=(const mat& other)
{
	if(other.p !=NULL)
	{
		if (&other != this)
		{
			zero(other.row,other.col);
			memcpy(p, other.p, sizeof(double)*row*col);
		}
	}
	return *this;
}

//-------------乘一個實數----------------
mat mat::operator*(double value) const
{
	mat	result(*this) ;	
	for (int i = 1 ; i <= row ; ++i)
	{
		for (int j = 1 ; j <= col; ++j)
			 result.set(i,j,result.r(i,j)*value);
	}
	return result ;
}

//-------------乘一個整數----------------
mat mat::operator*(int value) const
{
	mat	result(*this) ;	
	for (int i = 1 ; i <= row ; i++)
	{
		for (int j = 1 ; j <= col; j++)
			 result.set(i,j,result.r(i,j)*value);
	}
	return result ;
}

//-------------矩陣乘----------------
mat	mat::operator*(const mat& other) const
{
	// 首先檢查行列數是否符合要求
	ASSERT (col == other.row);
	mat result;result.zero(row,other.col);
	double	value ;
	for (int i = 1 ; i <=row ; i++)
	{
		for (int j = 1 ; j <= other.col ; j++)
		{
			value = 0.0 ;
			for (int k = 1 ; k <= col ; k++)
			{
				value += this->r(i, k) * other.r(k, j);
			}
			result.set(i,j,value) ;
		}
	}
	return result ;
}

//-------------矩陣+----------------
mat	mat::operator+(const mat& other) const
{
	ASSERT (row == other.row && col == other.col); // 首先檢查行列數是否相等
	mat	result;result.zero(row,col);
	for (int i = 1; i <= row ; i++)
	{
		for (int j = 1; j <= col; j++)
		{
			result.set(i,j,r(i,j)+other.r(i,j));
		}
	}
	return result ;
}

//-------------矩陣-  ----------------
mat	mat::operator-(const mat& other) const
{
	ASSERT (row == other.row && col == other.col); // 首先檢查行列數是否相等
	mat	result;result.zero(row,col);
	for (int i = 1 ; i <= row ; ++i)
	{
		for (int j = 1 ; j <= col; ++j)
			result.set(i,j,r(i,j)-other.r(i,j));
	}
	return result;
}

//-------------矩陣/----------------
mat mat::operator/(double a) const
{
	mat	result;result.zero(row,col);	
	for (int i = 1 ; i <= row ; ++i)
	{
		for (int j = 1 ; j <= col; ++j)
			 result.set(i,j,this->r(i,j)/a);
	}
	return result ;
}

//-------------矩陣/----------------
mat mat::operator/(int a) const
{
	mat	result;result.zero(row,col);
	for (int i = 1 ; i <= row ; ++i)
	{
		for (int j = 1 ; j <= col; ++j)
			 result.set(i,j,this->r(i,j)/a);
	}
	return result ;
}

//----------------矢量除-----------------
mat mat::operator/(const mat& other) const
{
	mat out;
	int m=other.row;
	int n=other.col;
	BOOL a1=true;
	if (m !=n) 	
	{
		a1=false;
		ASSERT(a1);
	}
	else
	{
		mat thismat;thismat.zero(row,col);
		for (int i=1;i<=row;i++)
		{
			for (int j=1;j<=col;j++)
			{
				thismat.set(i,j,r(i,j));
			}
		}
		mat inva=other.invmat();
		out=thismat*inva;
	}
	return out;
}

//-----------------------矢量差乘------------------
mat mat::operator^(const mat& c) const
{
	mat out;	
	int m=c.row;
	int n=c.col;
	BOOL a1;
	if ( (m == row ) && ( n == col)  && (m*n == 3) )
	{
		a1=true;
		if (m =3)
		{
			out.zero(3,1);
			out.set(1,1,r(2,1)*c.r(3,1)-r(3,1)*c.r(2,1));
			out.set(2,1,r(3,1)*c.r(1,1)-r(1,1)*c.r(3,1));
			out.set(3,1,r(1,1)*c.r(2,1)-r(2,1)*c.r(1,1));
		}
		else
		{
			out.zero(1,3);
			out.set(1,1,r(1,2)*c.r(1,3)-r(1,3)*c.r(1,2));
			out.set(2,1,r(1,3)*c.r(1,1)-r(1,1)*c.r(1,3));
			out.set(3,1,r(1,1)*c.r(1,2)-r(1,2)*c.r(1,1));
		}
	}
	else
	{
		a1=false;
		ASSERT(a1);
	}
	return out;
}

//---------------矢量點乘--------------------
double mat::operator|(const mat& a) const
{
	//無論是矩陣還是向量,只對第一列有效/列
	double out=0.0;
	int m=a.row;
	int n=a.col;
	if (( m==row ) && (n ==col) )
	{
		double temp=0.0;
		if (m==1)
		{
			for (int i=1;i<=n;i++)
			{
				temp+=a.r(1,i)*r(1,i);
			}
			out=temp;
		}
		else
		{
			if (n==1)
			{
				for (int i=1;i<=m;i++)
				{
					temp+=a.r(i,1)*r(i,1);
				}
				out=temp;
			}	
		}
	}
	return out;
}

//--------------- 2范數 -----------------------
double mat::normmat() const
{
	double out=0.0;
	int m=row;
	int n=col;
	BOOL a1=true;
	if ((m !=1) && (n !=1)) a1=false; 
	ASSERT(a1);
	if (m==1)
	{
		double temp=0.0;
		for (int i=1;i<=n;i++)
		{
			temp+=r(1,i)*r(1,i);
		}
		out=sqrt(temp);
	}
	else
	{
		if (n==1)
		{
			double temp=0.0;
			for (int i=1;i<=m;i++)
			{
				temp+=r(i,1)*r(i,1);
			}
			out=sqrt(temp);
		}
	}
	return out;
}


//---------------伴隨陣-------------------------
mat mat::adj() const
{
	mat out;out.zero(row,col);
	for(int i=1;i<=row;i++)
	{
		for(int j=1;j<=col;j++)
		{
			if (((i+j)%2)!=0)
			{
				out.set(i,j,(-1.0)*(sub_mat(i,j).detmat()));
			}
			else
			{
				out.set(i,j,       (sub_mat(i,j).detmat()));
			}
		}
	}
	mat reuslt=out.T();
	return reuslt;
}

//---------------行列式的值-----------------------
double mat::detmat() const
{
	double out=0.0;
	BOOL a1=true;
	if ( row !=col) 
		a1=false; 
	ASSERT(a1);

	if ( (col==1) &&(row==1) )
	{
		out=r(1,1);
	}
	else
	{
		if ((col==2)&&(row==2))
		{
			out=r(1,1)*r(2,2)-r(1,2)*r(2,1);
		}
		else
		{
			int i=1;
			for(int j=1;j<=col;j++)
			{
				if ( ((i+j)%2 )!=0)
				{
					out+=(-1.0)*sub_mat(i,j).detmat()*r(i,j);
				}
				else
				{
					out+=       sub_mat(i,j).detmat()*r(i,j);
				}
			}
		}
	}
	return out;
}

//--------------------余子式------------------------
mat mat::sub_mat(int rr,int cc) const
{
	mat out;out.zero(row-1,col-1);
	int m=out.row;
	int n=out.col;
	for (int i=1;i<=m;i++)
	{
		for (int j=1;j<=n;j++)
		{
			if ( i< rr)
			{
				if ( j< cc)
				{
					out.set(i,j,r(i,j));
				}
				else
				{
					out.set(i,j,r(i,j+1));
				}
			}
			else
			{
				if (i>=rr)
				{
					if ( j< cc)
					{
						out.set(i,j,r(i+1,j));
					}
					else
					{
						out.set(i,j,r(i+1,j+1));
					}
				}
			}
		}
	}
	return out;
}

//--------------------逆矩陣--------------------------------
mat mat::invmat() const
{
	mat out;out.zero(row,col);

	BOOL a1=true;
	if (col!=row)
	{
		a1=false; 
		ASSERT(a1);
	}
	else
	{
		double d=this->detmat();
		if (d !=0.0)
		{
			double d1=1/d;
			mat rusult=adj();
			int m=rusult.row;
			int n=rusult.col;
			for (int i=1;i<=m;i++)
			{
				for (int j=1;j<=n;j++)
				{
					out.set(i,j,rusult.r(i,j)*d1);			
				}
			}
		}
	}
	return out;
}

//------2個線性空間的結合(return this)----------------
void mat::operator||(mat a)
{	
	int m1=a.row;	int n1=a.col;
	int m=row;      int n=col;
	BOOL a1=true;
	if (m1 != m)
	{
		a1=false;
		ASSERT(a1);
	}
	else
	{
		mat temp;temp.zero(m,n);
		for (int i=1;i<=m;i++)
		{
			for (int j=1;j<=n;j++)
			{
				temp.set(i,j,r(i,j));
			}
		}
		zero(m1,n+n1);		
		for (int ii=1;ii<=row;ii++)
		{
			for (int jj=1;jj<=col;jj++)
			{
				if (jj<=n)
					this->set(ii,jj,temp.r(ii,jj));
				else
					this->set(ii,jj,a.r(ii,jj-n));
			}
		}
	} 
}

//------2個線性空間的結合(return ohers)----------------
mat mat::operator|=(const mat& a) const
{
	mat out;out.zero(row,col);
	memcpy(out.p, p, sizeof(double)*row*col);
	out||a;
	return out;
}

//------2個線性行與列均不相同空間的結合(return ohers)----------------
mat mat::operator /=(const mat& a) const
{
	int m1=a.row,n=a.col;
	int m;
	if (m1> row)
		m=m1;
	else
		m=row;
	mat out;out.zero(m,col+n);
	for (int i=1;i<=out.row;i++)
	{
		for (int j=1;j<=out.col;j++)
		{
			if (j<=col)
				out.set(i,j,r(i,j));
			else
				out.set(i,j,a.r(i,j-col));
		}
	}
	return out;
}

//------行向量與一個實數的結合----------------
void mat::operator||(double a)
{
	int m=row;      int n=col;
	ASSERT(m < 1.5);
	mat temp;temp.zero(1,n);
	for (int j=1;j<=n;j++)
	{
		temp.set(1,j,r(1,j));
	}
	zero(m,n+1);
	for (int jj=1;jj<=col;jj++)
	{
		if (jj<=n)
			this->set(1,jj,temp.r(1,jj));
		else
			this->set(1,jj,a);
	} 
}


int mat::length()
{
	return col*row;
}


mat mat::Delc(int n) const
{
	ASSERT( 1<=n  && n<=col);
	mat out;
	if(col==1)
	{
		out.zero(row,1);
	}
	else
	{
		out.zero(row,col-1);
		for (int i=1;i<=row;i++)
		{
			for (int j=1;j<=col-1;j++)
			{
				if (j < n)
					out.set(i,j,r(i,j));
				else
					out.set(i,j,r(i,j+1));
			}
		}		
	}
	return out;
}

mat mat::Delr(int n) const
{
	mat out;out.zero(row-1,col);
	if ( n <= row)
	{
		for (int j=1;j<=col;j++)
		{
			for (int i=1;i<=row-1;i++)
			{
				if (i < n)
					out.set(i,j,r(i,j));
				else
					out.set(i,j,r(i+1,j));
			}
		}		
	}
	return out;
}

void mat::setmat(int m, int n, double a[])
{
	Freethis();
	row=m;	col=n;
	int nSize = row*col;
	ASSERT (nSize > 0);
	p = new double[nSize];	
	if (p == NULL)
		exit(0);				        	// 內存分配失敗
	if (IsBadReadPtr(p, sizeof(double) * nSize))
		exit(0);
	for (int i=0;i<nSize;i++)
	{
		p[i]=a[i];
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频一区| 日韩欧美一区二区在线视频| 欧美性xxxxx极品少妇| 日韩欧美国产高清| 一区二区三区四区不卡视频| 国产一区福利在线| 在线电影院国产精品| 最新中文字幕一区二区三区| 九九九久久久精品| 欧美日韩国产一级片| 国产精品美女久久久久久久| 国产一区二区三区四区在线观看| 欧美三级韩国三级日本三斤| 中文字幕亚洲电影| 国产激情91久久精品导航| 欧美电影在线免费观看| 亚洲h动漫在线| 91国偷自产一区二区开放时间| 国产欧美久久久精品影院| 麻豆国产精品777777在线| 91精品国产91久久久久久一区二区| 伊人夜夜躁av伊人久久| 91麻豆免费视频| 成人欧美一区二区三区白人 | 日韩二区在线观看| 在线观看日韩毛片| 亚洲综合色噜噜狠狠| 91小视频在线观看| 亚洲精品福利视频网站| 欧洲一区在线观看| 亚洲成人综合在线| 制服丝袜在线91| 日日夜夜精品视频天天综合网| 欧美午夜精品免费| 日韩高清在线不卡| 精品黑人一区二区三区久久| 美日韩一区二区| 久久久久青草大香线综合精品| 国产在线播放一区| 欧美国产成人在线| 91在线观看美女| 一区二区三区国产精华| 欧美在线视频全部完| 午夜精品久久久久影视| 欧美电影免费观看高清完整版| 激情文学综合插| 国产欧美va欧美不卡在线| 不卡的电影网站| 亚洲高清不卡在线观看| 欧美一级黄色大片| 国产v综合v亚洲欧| 一二三四区精品视频| 在线综合+亚洲+欧美中文字幕| 激情偷乱视频一区二区三区| 成人欧美一区二区三区白人| 欧美日韩综合在线| 韩国理伦片一区二区三区在线播放| 久久精品在这里| 色网站国产精品| 久久精品99久久久| 日韩伦理电影网| 欧美一级黄色大片| 99精品视频免费在线观看| 亚洲一二三区不卡| 国产欧美一区视频| 欧美日韩精品一区二区三区四区 | 国产精品综合一区二区三区| 亚洲欧美另类小说| 欧美成人a在线| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产美女视频91| 亚洲国产欧美在线| 欧美国产97人人爽人人喊| 欧美四级电影网| 国产精品亚洲一区二区三区在线| 亚洲一区二区成人在线观看| 久久久三级国产网站| 欧美美女黄视频| 色偷偷88欧美精品久久久| 久久99精品久久久| 婷婷成人激情在线网| 国产精品久久久久一区二区三区| 欧美日韩aaaaa| 91一区二区在线观看| 国产一区二区在线影院| 日本一不卡视频| 亚洲综合色丁香婷婷六月图片| 国产欧美视频在线观看| 日韩西西人体444www| 欧美日韩视频在线第一区 | 91麻豆精品国产91久久久久久久久| 不卡一卡二卡三乱码免费网站| 狠狠色狠狠色综合系列| 日日欢夜夜爽一区| 亚洲综合色在线| 亚洲精品五月天| 亚洲女爱视频在线| 中文字幕中文字幕中文字幕亚洲无线| 欧美大片拔萝卜| 日韩三级av在线播放| 欧美日韩激情一区二区三区| 欧美在线高清视频| 一本一道久久a久久精品| 成人免费毛片嘿嘿连载视频| 国产一区免费电影| 国产剧情一区在线| 国产一本一道久久香蕉| 黑人巨大精品欧美黑白配亚洲| 全国精品久久少妇| 美女网站色91| 精品亚洲成av人在线观看| 寂寞少妇一区二区三区| 麻豆91在线播放免费| 久久电影网电视剧免费观看| 美女尤物国产一区| 国产一区二区导航在线播放| 国产一区二区伦理片| 懂色av一区二区夜夜嗨| av一区二区三区四区| 色综合久久久久综合体桃花网| 色94色欧美sute亚洲线路一久| 日本久久电影网| 欧美精品久久99久久在免费线| 日韩欧美一级二级| 久久嫩草精品久久久久| 国产精品免费丝袜| 亚洲综合成人网| 免费精品视频在线| 国产一区二区三区久久久| 国产成+人+日韩+欧美+亚洲 | 国内成人免费视频| 色婷婷久久久久swag精品| 欧美亚洲丝袜传媒另类| 91麻豆精品国产无毒不卡在线观看| 日韩欧美国产综合一区| 欧美国产精品劲爆| 亚洲无人区一区| 久久精品国产免费| 99九九99九九九视频精品| 欧美日韩视频在线观看一区二区三区 | 成人动漫精品一区二区| 欧美性受xxxx| 欧美成人性战久久| 中文字幕在线观看一区二区| 亚洲国产视频直播| 国产成人亚洲综合a∨猫咪| 色av一区二区| 欧美精品一区视频| 亚洲伦在线观看| 精品综合久久久久久8888| 91浏览器入口在线观看| 日韩欧美一区二区在线视频| 国产精品国产a| 久久国产精品72免费观看| 99re视频这里只有精品| 精品精品国产高清一毛片一天堂| 亚洲欧美视频在线观看视频| 九九精品视频在线看| 色综合久久久久久久久| 久久精品人人爽人人爽| 日韩黄色在线观看| 99热这里都是精品| 欧美精品一区二区三区蜜臀| 亚洲妇熟xx妇色黄| 菠萝蜜视频在线观看一区| 日韩女优电影在线观看| 亚洲精品写真福利| 成人精品小蝌蚪| 欧美电视剧在线看免费| 亚洲成人一区在线| 97精品视频在线观看自产线路二| 精品国精品国产| 午夜精品福利视频网站| av不卡一区二区三区| 久久精品视频一区二区三区| 美女一区二区视频| 91精品免费在线| 一区二区三区欧美| 91色porny| 国产精品国产成人国产三级| 国产一区二区免费看| 日韩精品一区二区三区视频| 丝袜脚交一区二区| 欧美日韩精品免费| 洋洋av久久久久久久一区| 99国产精品99久久久久久| 国产欧美一区二区三区沐欲| 国产一区二三区| 久久久久国产精品麻豆| 精品一区二区久久| 精品乱码亚洲一区二区不卡| 毛片av一区二区三区| 7777女厕盗摄久久久| 偷拍日韩校园综合在线| 欧美欧美欧美欧美| 日本不卡免费在线视频| 欧美一区二区三区免费观看视频| 午夜久久电影网| 91麻豆精品国产无毒不卡在线观看| 午夜久久久久久久久久一区二区|