#include "stdafx.h" #include "DynamicTSP.h" #include #include CDynamicTSP::CDynamicTSP(void) { m_pBitArray = NULL; m_pDP = NULL; Reset(); } CDynamicTSP::~CDynamicTSP(void) { Reset(); } void CDynamicTSP::Reset() { if (m_pDP) { for (int i=0; i>i) & 1) { return i; } } return -1; } double CDynamicTSP::TSP_Process(int nFrom, int nPathSet, int nLen) { // setÀÌ ÇϳªÀ϶§ if (nLen == 1) { int to = get_bit_index(nPathSet); return m_pPathGraph[nFrom][to]; } // ÀúÀåÇÑ °ªÀ» ÀÌ¿ë if (m_pDP[nFrom][nPathSet].dMinCost) { return m_pDP[nFrom][nPathSet].dMinCost; } int nMinPathSet = 0; double dCost = DBL_MAX; for(int i=0; i dNewCost) { nMinPathSet = nNewPathSet ; dCost = dNewCost ; } } } // ÃÖ¼Òºñ¿ëÀ»ÀúÀå m_pDP[nFrom][nPathSet].dMinCost = dCost ; m_pDP[nFrom][nPathSet].nPathSet = nMinPathSet ; return dCost; } double CDynamicTSP::CalculateTSP() { if (m_nPathCount<1) return -1.0; if (m_nSubSetCount<1) return -1.0; if (m_nPathCount<2) { return (m_dTotalDistance=GetTotalDistance()); } int nPathSet = 0; for(int i=0; i