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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sacode.cpp

?? "遺傳算法"以及"退火算法"用C++語言可以直接運(yùn)行
?? CPP
字號(hào):
#include <StdAfx.h>
#include <math.h>
#include <algorithm>
using std::random_shuffle;
using std::swap;

/*********************************************************
	InitialSA()——模擬退火算法的初始化
	1. 根據(jù)直角坐標(biāo)生成城市距離矩陣
	2. 計(jì)算初始溫度
*********************************************************/
void InitialSA()
{
	if( FileType == 1 )
	{
		CityNumber = vecCitys.size();
	
		vecCityDistances.clear();
		std::vector<SYCity>::iterator iter_from, iter_to;
		for( iter_from=vecCitys.begin();iter_from!=vecCitys.end();iter_from++ )
		{
			for( iter_to=vecCitys.begin();iter_to!=vecCitys.end();iter_to++ )
			{
				SYCityDistance tmp_citydistance;
				CountCityDistance( *iter_from, *iter_to, tmp_citydistance );

				vecCityDistances.push_back( tmp_citydistance );
			}
		}
	}
	else if( FileType == 2 )
	{
		vecCitys.clear();

		int nRow = -1;
		int ncityindex;
		CString strcityname;
		std::vector<SYCityDistance>::iterator iter_dis;
		for( iter_dis=vecCityDistances.begin();iter_dis!=vecCityDistances.end();iter_dis++ )
		{
			if( nRow < 0 )
				nRow = iter_dis->m_nFromCity;

			if( iter_dis->m_nFromCity == nRow )
			{
				ncityindex = iter_dis->m_nToCity;
				strcityname.Format("城市 %d",ncityindex);

				SYCity tmpCity;
				tmpCity.m_strName = strcityname;
				tmpCity.m_nIndex = ncityindex;
				tmpCity.m_Coordinate.m_fcodx = 0.0;
				tmpCity.m_Coordinate.m_fcody = 0.0;
				vecCitys.push_back( tmpCity );
			}
			else
				break;
		}
		CityNumber = vecCitys.size();
	}	
	
	double fMaxCityDistance = 0.0;
	double fMinCityDistance = 100000.0;
	double fCityDistance = 0.0;
	std::vector<SYCityDistance>::iterator iter_dis;
	for( iter_dis=vecCityDistances.begin();iter_dis!=vecCityDistances.end();iter_dis++ )
	{
		fCityDistance = iter_dis->m_fDistance;

		if( fCityDistance > fMaxCityDistance )
			fMaxCityDistance = fCityDistance;

		if( fCityDistance < fMinCityDistance )
			fMinCityDistance = fCityDistance;
	}

	int rate = 20;
	InitialTemperature = CountInitialTemperatureMaxMin( fMaxCityDistance, fMinCityDistance, rate );
	NowTemperature = InitialTemperature;
	NowExternalIterNumber = 0;
	NowInnerIterNumber = 0;
}

/*********************************************************
	ClearSA()——清空殘留數(shù)據(jù)
*********************************************************/
void ClearSA()
{
	vecCitys.clear();
	vecCityDistances.clear();
	CityNumber = 0;
	InitialTemperature = 0.0;
	NowTemperature = 0.0;
	NowExternalIterNumber = 0;
	NowInnerIterNumber = 0;
}

/*********************************************************
	CountCityDistance()——計(jì)算城市之間的距離
	輸入?yún)?shù): 1、FromCity			源城市引用
			   2、ToCity			目標(biāo)城市引用
			   3、CityDistance		城市距離利用,返回值
	返回值:   源城市與目標(biāo)城市之間的距離,double型
*********************************************************/
double CountCityDistance( SYCity &FromCity, SYCity &ToCity, SYCityDistance &CityDistance )
{
	CityDistance.m_nFromCity = FromCity.m_nIndex;
	CityDistance.m_nToCity = ToCity.m_nIndex;

	CityDistance.m_fDistance = sqrt( (FromCity.m_Coordinate.m_fcodx-ToCity.m_Coordinate.m_fcodx)*(FromCity.m_Coordinate.m_fcodx-ToCity.m_Coordinate.m_fcodx) +
									 (FromCity.m_Coordinate.m_fcody-ToCity.m_Coordinate.m_fcody)*(FromCity.m_Coordinate.m_fcody-ToCity.m_Coordinate.m_fcody) );

	return CityDistance.m_fDistance;

}

/*********************************************************
	CountInitialTemperatureMaxMin()——計(jì)算起始溫度
	輸入?yún)?shù): 1、maxdis	城市之間的最大距離
			   2、mindis	城市之間的最小距離
			   3、rate		比例系數(shù)
	返回值:   起始溫度,double型
	計(jì)算方法參見《現(xiàn)代優(yōu)化計(jì)算方法》(邢文訓(xùn)等編著) p117 
*********************************************************/
double CountInitialTemperatureMaxMin( double maxdis, double mindis, int rate )
{
	return( rate*( CityNumber*maxdis - CityNumber*mindis ) );
}

/*********************************************************
	CreateCityRouter()——生成城市行走路徑
	輸入?yún)?shù): 1、CityRouter	城市行走路徑的vector引用,返回值
	返回值:   空
	注:生成1->2->3->......->n的城市行走順序,作為算法初值
*********************************************************/
void CreateCityRouter( CityRouterDef &CityRouter )
{
	for( int i=1;i<=CityNumber;i++ )
		CityRouter.push_back( i );

//	random_shuffle(CityRouter.begin(), CityRouter.end()); 
}

/*********************************************************
	CreateCityRouter2opt()——從某行走路徑的鄰域中隨機(jī)選擇一個(gè)新的行走路徑,鄰域映射為2-opt
	輸入?yún)?shù): 1、preCityRouter		原先行走路徑的vector引用
			   2、CityRouter		新的行走路徑的vector引用,返回值
	返回值:   空
*********************************************************/
void CreateCityRouter2opt( CityRouterDef &preCityRouter, CityRouterDef &CityRouter )
{
	int swapA, swapB;
	CityRouter = preCityRouter;

	while(1)
	{
		swapA = (rand()%CityNumber)-1;
		if( swapA >= 0 )
			break;
	}

	while(1)
	{
		swapB = (rand()%CityNumber)-1;
		if( swapA != swapB && swapB >= 0 )
		{
			int tmp = CityRouter[swapA];
			CityRouter[swapA] = CityRouter[swapB];
			CityRouter[swapB] = tmp;
			break;
		}
	}
}

/*********************************************************
	CountTotalDistance()——根據(jù)給定路徑計(jì)算該路徑對(duì)應(yīng)的總路程
	輸入?yún)?shù): 1、CityRouter		給定行走路徑的vector引用
	返回值:   總路程,double型
*********************************************************/
double CountTotalDistance( CityRouterDef &CityRouter )
{
	if( CityRouter.size() != CityNumber )
		return 0.0;

	double totaldis = 0.0;
	for( int i=1;i<CityNumber;i++ )
	{
		totaldis += FindCityDistance( CityRouter[i-1], CityRouter[i] );
	}
	totaldis += FindCityDistance( CityRouter[CityNumber-1], CityRouter[0] );
	return totaldis;
}

/*********************************************************
	FindCityDistance()——根據(jù)兩城市的索引獲得兩城市之間的路程
	輸入?yún)?shù): 1、FromCityIndex		源城市的索引
			   2、ToCityIndex		目標(biāo)城市的索引
	返回值:   兩城市之間的路程,double型
*********************************************************/
double FindCityDistance( int FromCityIndex, int ToCityIndex )
{
	int nIndex = (FromCityIndex-1)*CityNumber+(ToCityIndex-1);

	std::vector<SYCityDistance>::iterator iter_citydis;
	iter_citydis = vecCityDistances.begin()+nIndex;

	if( iter_citydis->m_nFromCity == FromCityIndex &&
		iter_citydis->m_nToCity == ToCityIndex )
		return( iter_citydis->m_fDistance );
	else
		return( 0.0 );
}

/*********************************************************
	CountDownTemperature()——計(jì)算外層循環(huán)的下降后的溫度
	輸入?yún)?shù): 1、nowtemp		當(dāng)前溫度
			   2、DownMode		下降方式,保留
	返回值:   下降后的溫度,double型
	注:		溫度下降方式 T(k+1) = K*T(k),K=0.95溫度下降方式 T(k+1) = K*T(k),K=0.95
*********************************************************/
double CountDownTemperature( double nowtemp, int DownMode )
{
	return( 0.95*nowtemp );
}

/*********************************************************
	JudgeOverInnerLoop()——判斷是否結(jié)束某一溫度下的內(nèi)層循環(huán)
	輸入?yún)?shù): 1、JudgeMode		判斷方式,保留
	返回值:   是否結(jié)束標(biāo)志位,BOOL型
	注:		某一溫度下的循環(huán)次數(shù)是固定的,即城市個(gè)數(shù)的三次方
*********************************************************/
BOOL JudgeOverInnerLoop( int JudgeMode )
{
	if( NowInnerIterNumber >= CityNumber*CityNumber*CityNumber )  //*CityNumber)
		return TRUE;
	else
		return FALSE;
}

/*********************************************************
	JudgeOverExternalLoop()——判斷是否結(jié)束模擬退火算法
	輸入?yún)?shù): 1、JudgeMode		判斷方式,保留
	返回值:   是否結(jié)束標(biāo)志位,BOOL型
	注:		使用“零度法”的判斷方式,T(k)<= 0.01,結(jié)束計(jì)算
*********************************************************/
BOOL JudgeOverExternalLoop( int JudgeMode )
{
	if( NowTemperature <= 0.01 )		//InitialTemperature*0.001 )
		return TRUE;
	else
		return FALSE;
}

/*********************************************************
	FormRouterString()——根據(jù)行走路徑生成路徑字符串,供顯示使用
	輸入?yún)?shù): 1、CityRouter		給定行走路徑的引用
	返回值:   行走路徑的顯示字符串
*********************************************************/
CString FormRouterString( SYRouter &CityRouter )
{
	CString strTemp, strValue;

	strTemp = "路徑 ";
	
	std::vector<int>::iterator iter_cityindex;
	for( iter_cityindex=CityRouter.m_CityRouter.begin();
		 iter_cityindex!=CityRouter.m_CityRouter.end();
		 iter_cityindex++ )
	{
		strValue.Format("%d",*iter_cityindex);
		strTemp += strValue;

		if( iter_cityindex+1 == CityRouter.m_CityRouter.end() )
			strTemp += " ";
		else
			strTemp +=" ";
	}

	strTemp += "  ";
	strTemp += "總路程 ";
	strValue.Format("%10.4f",CityRouter.m_fTotalDistance);
	strTemp += strValue;
	return strTemp;
}

/*********************************************************
	GetCoordinatebyCityIndex()——根據(jù)城市索引獲取城市坐標(biāo)
	輸入?yún)?shù): 1、cityindex				城市索引
			   2、coordx				城市X坐標(biāo)
			   3、coordy				城市Y坐標(biāo)
	返回值:  空 
*********************************************************/
void GetCoordinatebyCityIndex( int cityindex, double &coordx, double &coordy )
{
	coordx = 0.0;
	coordy = 0.0;

	if( cityindex > 0 && cityindex <= CityNumber )
	{
		std::vector<SYCity>::iterator iter_city;
		iter_city = vecCitys.begin()+cityindex-1;

		if( iter_city->m_nIndex == cityindex )
		{
			coordx = iter_city->m_Coordinate.m_fcodx;
			coordy = iter_city->m_Coordinate.m_fcody;
		}
	}
}

/*********************************************************
	GetRouterFileString()——獲得指定路徑的城市坐標(biāo)字符串
	輸入?yún)?shù):	1、CityRouter			城市路徑索引 
				2、strTemp				城市坐標(biāo)字符串
	返回值:  空 
*********************************************************/
void GetRouterFileString( SYRouter &CityRouter, CString &strTemp )
{
	strTemp.Empty();

	CString strValue;
	std::vector<int>::iterator iter_city;
	double coordx, coordy;
	for( iter_city=CityRouter.m_CityRouter.begin();
		 iter_city!=CityRouter.m_CityRouter.end();
		 iter_city++ )
	{
		GetCoordinatebyCityIndex( *iter_city, coordx, coordy );
		strValue.Format("%.4f %.4f\n",coordx, coordy );
		strTemp += strValue;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源在线观看| 欧美日韩成人在线| 蜜臀av亚洲一区中文字幕| 国产精品久久久久久亚洲毛片| 欧美日韩视频第一区| 成人激情动漫在线观看| 狠狠色丁香久久婷婷综| 视频一区在线播放| 亚洲另类在线视频| 国产欧美日韩中文久久| 精品国产免费视频| 欧美一区二区日韩一区二区| 色婷婷一区二区| 白白色亚洲国产精品| 国产91综合一区在线观看| 麻豆中文一区二区| 琪琪久久久久日韩精品| 亚洲综合久久av| 亚洲精品菠萝久久久久久久| 国产精品久久久久久久久搜平片| 精品国产乱码久久久久久浪潮| 欧美日本在线一区| 欧美色图一区二区三区| 91九色02白丝porn| 91麻豆国产精品久久| 成人av一区二区三区| 成人精品gif动图一区| 国v精品久久久网| 国产成人亚洲综合a∨猫咪| 精品一区二区免费在线观看| 蜜臀精品久久久久久蜜臀 | 欧洲av在线精品| 91在线观看视频| 99国产精品久久久| 一本色道久久综合亚洲aⅴ蜜桃| 成人18精品视频| 成人午夜在线视频| 99精品久久99久久久久| av一区二区三区四区| 波多野结衣一区二区三区| www.性欧美| 91欧美一区二区| 日本道在线观看一区二区| 在线一区二区三区四区五区| 在线观看三级视频欧美| 欧美日韩国产在线观看| 91麻豆精品91久久久久同性| 日韩三级伦理片妻子的秘密按摩| 精品卡一卡二卡三卡四在线| 久久蜜桃av一区精品变态类天堂 | 欧美mv日韩mv国产网站| 久久一区二区三区国产精品| 久久久久久久综合色一本| 国产欧美精品日韩区二区麻豆天美| 中文子幕无线码一区tr| 亚洲三级在线免费| 亚洲成人1区2区| 精品在线一区二区三区| 国产91富婆露脸刺激对白| 91碰在线视频| 日韩限制级电影在线观看| 国产亚洲综合性久久久影院| 1000部国产精品成人观看| 亚洲一区免费视频| 老司机精品视频在线| 成人精品在线视频观看| 欧美午夜免费电影| www日韩大片| 日韩美女视频一区| 日韩电影在线一区| 国产精品资源在线观看| 色综合天天综合| 欧美一区二区三区的| 国产精品美女一区二区三区| 香蕉久久夜色精品国产使用方法| 免费成人在线影院| av一区二区三区四区| 欧美精品高清视频| 国产精品国产自产拍高清av| 日日摸夜夜添夜夜添亚洲女人| 国产高清久久久久| 欧美一a一片一级一片| 久久婷婷成人综合色| 亚洲精品少妇30p| 久久er99精品| 欧美丝袜自拍制服另类| 国产亚洲精品bt天堂精选| 亚洲一区二区欧美| 成人教育av在线| 日韩欧美国产小视频| 一区二区在线观看av| 激情丁香综合五月| 欧美视频一区二区三区在线观看| 久久久久久久久久久久久久久99| 一片黄亚洲嫩模| 国产成人av一区二区三区在线| 欧美日韩一区高清| 国产精品区一区二区三区| 美女脱光内衣内裤视频久久网站| 色网综合在线观看| 国产精品欧美一区喷水| 久久草av在线| 欧美日韩aaaaa| 亚洲精品欧美在线| 成人激情小说乱人伦| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产精品久久777777| 国产在线精品一区二区不卡了 | 亚洲精品自拍动漫在线| 国产剧情在线观看一区二区| 欧美一卡二卡三卡四卡| 亚洲综合色婷婷| 91色|porny| 国产精品少妇自拍| 国产suv一区二区三区88区| 精品卡一卡二卡三卡四在线| 日本中文在线一区| 欧美喷水一区二区| 亚洲不卡在线观看| 欧美三级视频在线播放| 亚洲激情成人在线| 91性感美女视频| 成人免费在线视频| 91欧美激情一区二区三区成人| 国产精品久久久久久久久免费相片| 国产精品99久久久久久久vr| 久久色视频免费观看| 久久电影国产免费久久电影| 91麻豆精品国产综合久久久久久 | 亚洲成精国产精品女| 欧美三级中文字幕| 亚洲大片免费看| 欧美肥妇free| 免费观看在线色综合| 日韩欧美高清一区| 国产麻豆欧美日韩一区| 久久久久久久久岛国免费| 国产精品亚洲人在线观看| 中文字幕乱码亚洲精品一区| 国产.欧美.日韩| 亚洲人妖av一区二区| 色国产综合视频| 亚洲国产色一区| 91精品国产欧美日韩| 蜜桃视频第一区免费观看| 精品国产污网站| 国产成人免费网站| 亚洲人成亚洲人成在线观看图片| 色综合视频一区二区三区高清| 亚洲男人天堂一区| 欧美久久免费观看| 老司机免费视频一区二区三区| 久久久久久99精品| 不卡av在线免费观看| 亚洲一二三四区不卡| 91精品久久久久久蜜臀| 国产在线精品一区二区夜色| 中文字幕精品一区| 欧美在线免费观看视频| 另类专区欧美蜜桃臀第一页| 中文字幕久久午夜不卡| 色婷婷久久久久swag精品| 日韩av中文字幕一区二区| 国产亚洲精品免费| 在线视频一区二区免费| 久久99国产精品免费| 中文字幕一区二区在线播放| 欧美写真视频网站| 国产伦精品一区二区三区免费迷| 中文字幕一区二区三区在线不卡| 欧美日韩美女一区二区| 国产精品99久| 亚洲韩国一区二区三区| 久久久无码精品亚洲日韩按摩| 色呦呦日韩精品| 国产在线一区观看| 亚洲国产欧美日韩另类综合| 精品嫩草影院久久| 在线观看日韩精品| 高清不卡在线观看| 日韩精品乱码免费| 国产精品色在线| 日韩精品一区二区三区在线播放| 91在线观看视频| 久久99精品久久久| 亚洲一区二区三区四区在线免费观看 | 日本丰满少妇一区二区三区| 精品在线免费视频| 亚洲男女一区二区三区| 久久综合九色综合久久久精品综合| 91色九色蝌蚪| 国产aⅴ综合色| 日本成人超碰在线观看| 亚洲免费在线视频| 中文字幕av一区二区三区| 欧美一区二区美女| 欧美在线免费观看亚洲| 成人精品免费视频| 国模娜娜一区二区三区| 日韩av中文字幕一区二区三区 |