sacode.h

来自「经典的人工智能问题求解」· C头文件 代码 · 共 105 行

H
105
字号
#include <vector>

struct SYCoordinate
{
	SYCoordinate()
	{
		m_fcodx = 0.0;
		m_fcody = 0.0;
	}

	double m_fcodx;
	double m_fcody;
};

struct SYCity
{
	SYCity()
	{
		m_nIndex = 0;
		m_strName.Empty();
	}

	int m_nIndex;					//城市编号
	CString m_strName;				//城市名称
	SYCoordinate m_Coordinate;		//城市坐标
};

struct SYCityDistance
{
	SYCityDistance()
	{
		m_nFromCity = 0;
		m_nToCity = 0;
		m_fDistance = 0.0;
	}

	int m_nFromCity;				//源城市
	int m_nToCity;					//目标城市
	double m_fDistance;				//城市之间的距离
};

typedef std::vector<int>	CityRouterDef;

void InitialSA();
void CreateCityRouter( CityRouterDef &CityRouter );
void CreateCityRouter2opt( CityRouterDef &preCityRouter, CityRouterDef &CityRouter );
double CountTotalDistance( CityRouterDef &CityRouter );
double CountCityDistance( SYCity &FromCity, SYCity &ToCity, SYCityDistance &CityDistance );
double FindCityDistance( int FromCityIndex, int ToCityIndex );
double CountInitialTemperature();
double CountDownTemperature( int DownMode );
BOOL JudgeOverInnerLoop( int JudgeMode );
BOOL JudgeOverExternalLoop( int JudgeMode );

struct SYRouter
{
	SYRouter()
	{
		m_CityRouter.clear();
		m_fTotalDistance = 0.0;
		m_fTemperature = 0.0;
		m_nExternalIterNumber = 0;
		m_nInnerIterNumber = 0;
	}

	SYRouter( double nowTemp,
			  int nowExtIterNum,
			  int nowInIterNum )
	{
		CreateCityRouter( m_CityRouter );
		m_fTotalDistance = CountTotalDistance( m_CityRouter );
		m_fTemperature = nowTemp;
		m_nExternalIterNumber = nowExtIterNum;
		m_nInnerIterNumber = nowInIterNum;
	}

	SYRouter( CityRouterDef &preCityRouter,
			  double nowTemp,
			  int nowExtIterNum,
			  int nowInIterNum )
	{
		CreateCityRouter2opt( preCityRouter, m_CityRouter );
		m_fTotalDistance = CountTotalDistance( m_CityRouter );
		m_fTemperature = nowTemp;
		m_nExternalIterNumber = nowExtIterNum;
		m_nInnerIterNumber = nowInIterNum;
	}

	void operator=(const SYRouter& srcRouter)
	{
		m_CityRouter = srcRouter.m_CityRouter;
		m_fTotalDistance = srcRouter.m_fTotalDistance;
		m_fTemperature = srcRouter.m_fTemperature;
		m_nExternalIterNumber = srcRouter.m_nExternalIterNumber;
		m_nInnerIterNumber = srcRouter.m_nInnerIterNumber;
	}

	CityRouterDef m_CityRouter;
	double m_fTotalDistance;
	double m_fTemperature;
	int m_nExternalIterNumber;
	int m_nInnerIterNumber;
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?