#pragma once #include #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 VectorPathData; typedef std::vector::iterator VectorPathDataIt; typedef std::vector::const_iterator constVectorPathDataIt; typedef std::vector VectorInteger; typedef std::vector::iterator VectorIntegerIt; typedef std::vector::const_iterator constVectorIntegerIt; typedef std::vector VectorBoolean; typedef std::vector::iterator VectorBooleanIt; typedef std::vector::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; };