#pragma once
|
|
#include <vector>
|
|
#define NO_PATH_DATA -999999
|
#define PATH_DATA_TYPE_COUNT 2
|
|
struct SPathData
|
{
|
SPathData(int nX=NO_PATH_DATA, int nY=NO_PATH_DATA, int nIdx=-1)
|
{
|
nIndex = nIdx;
|
nPosX = nX;
|
nPosY = nY;
|
memset(pDataType, 0, sizeof(int)*PATH_DATA_TYPE_COUNT);
|
}
|
|
void Reset()
|
{
|
nIndex = -1;
|
nPosX = NO_PATH_DATA;
|
nPosY = NO_PATH_DATA;
|
memset(pDataType, 0, sizeof(int)*PATH_DATA_TYPE_COUNT);
|
}
|
|
bool operator == (const SPathData& rhs) const
|
{
|
for (int i=0; i<PATH_DATA_TYPE_COUNT; i++)
|
{
|
if (pDataType[i]!=rhs.pDataType[i])
|
{
|
return false;
|
}
|
}
|
return true;
|
}
|
|
int nIndex;
|
int nPosX;
|
int nPosY;
|
BOOL bSelected;
|
int pDataType[PATH_DATA_TYPE_COUNT]; // Path Type (°æ·Î°¡ ¿©·¯°¡ÁöÀÏ °æ¿ì, ¿¹¸¦µé¾î Àü¸é ÈÄ¸é ¸®ºä ½Ã)
|
};
|
typedef std::vector<SPathData> VectorPathData;
|
typedef std::vector<SPathData>::iterator VectorPathDataIt;
|
typedef std::vector<SPathData>::const_iterator constVectorPathDataIt;
|
|
typedef std::vector<int> VectorInteger;
|
typedef std::vector<int>::iterator VectorIntegerIt;
|
typedef std::vector<int>::const_iterator constVectorIntegerIt;
|
|
typedef std::vector<bool> VectorBoolean;
|
typedef std::vector<bool>::iterator VectorBooleanIt;
|
typedef std::vector<bool>::const_iterator constVectorBooleanIt;
|
|
class AFX_EXT_CLASS CGreedyTSP
|
{
|
public:
|
CGreedyTSP(void);
|
virtual ~CGreedyTSP(void);
|
virtual void Reset();
|
|
// setter
|
virtual void SetPathData(const VectorPathData& vecPathData, const SPathData& ptStart);
|
virtual void SetPathData(const VectorPathData& vecPathData, const VectorInteger& vecPathResult);
|
|
// getter
|
int GetPathCount() const;
|
int GetPathResult(int nIndex) const;
|
const SPathData* GetPathData(int nIndex) const;
|
|
VectorInteger* GetPathResult();
|
VectorPathData* GetPathData();
|
double GetPathResult(VectorInteger& vecPathResult);
|
BOOL GetPathData(VectorPathData& vecPathData);
|
double GetTotalDistance();
|
double GetTotalDistance(const VectorInteger& vecPathResult);
|
|
// func
|
virtual double CalculateTSP();
|
virtual BOOL SortingPathResult();
|
static double CalculateDistance(const POINT& pt1, const POINT &pt2);
|
static double CalculateDistance(const SPathData& pt1, const SPathData &pt2);
|
static double CalculateDistanceX(const POINT& pt1, const POINT &pt2);
|
static double CalculateDistanceX(const SPathData& pt1, const SPathData &pt2);
|
static double CalculateDistanceY(const POINT& pt1, const POINT &pt2);
|
static double CalculateDistanceY(const SPathData& pt1, const SPathData &pt2);
|
|
|
protected:
|
int SelectPath(int nCurIdx);
|
void InitPathResult(const SPathData& ptStart);
|
|
int m_nStartIndex;
|
SPathData m_ptStart;
|
double m_dTotalDistance;
|
|
// graph data
|
int m_nPathCount;
|
double **m_pPathGraph;
|
|
// vector
|
VectorPathData m_vecPathData;
|
VectorInteger m_vecPathResult;
|
VectorBoolean m_vecPathAdded;
|
|
|
};
|