Changeset 90 in tspsg-svn for trunk/src


Ignore:
Timestamp:
Feb 17, 2010, 5:54:05 PM (15 years ago)
Author:
laleppa
Message:
Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/os.h

    r87 r90  
    7777        #define OS "Cygwin"ARCH
    7878        #define OSID quint8(4)
    79 #elif defined Q_OS_DARWIN
    80         #define OS "Darwin OS"ARCH
    81         #define OSID quint8(5)
    8279#elif defined Q_OS_DGUX
    8380        #define OS "DG/UX"ARCH
    84         #define OSID quint8(6)
     81        #define OSID quint8(5)
    8582#elif defined Q_OS_DYNIX
    8683        #define OS "DYNIX/ptx"ARCH
    87         #define OSID quint8(7)
     84        #define OSID quint8(6)
    8885#elif defined Q_OS_FREEBSD
    8986        #define OS "FreeBSD"ARCH
    90         #define OSID quint8(8)
     87        #define OSID quint8(7)
    9188#elif defined Q_OS_HPUX
    9289        #define OS "HP-UX"ARCH
    93         #define OSID quint8(9)
     90        #define OSID quint8(8)
    9491#elif defined Q_OS_HURD
    9592        #define OS "GNU Hurd"ARCH
    96         #define OSID quint8(10)
     93        #define OSID quint8(9)
    9794#elif defined Q_OS_IRIX
    9895        #define OS "SGI Irix"ARCH
    99         #define OSID quint8(11)
     96        #define OSID quint8(10)
    10097#elif defined Q_OS_LINUX
    10198        #define OS "Linux"ARCH
    102         #define OSID quint8(12)
     99        #define OSID quint8(11)
    103100#elif defined Q_OS_LYNX
    104101        #define OS "LynxOS"ARCH
     102        #define OSID quint8(12)
     103#elif defined Q_OS_MAC
     104        #define OS "Mac OS (Darwin)"ARCH
    105105        #define OSID quint8(13)
    106106#elif defined Q_OS_MSDOS
     
    122122        #define OS "HP Tru64 UNIX"ARCH
    123123        #define OSID quint8(19)
    124 #elif defined Q_OS_QNX6
    125         #define OS "QNX RTP 6.1"ARCH
     124#elif defined Q_OS_QNX
     125        #define OS "QNX Neutrino"ARCH
    126126        #define OSID quint8(20)
    127 #elif defined Q_OS_QNX
    128         #define OS "QNX"ARCH
    129         #define OSID quint8(21)
    130127#elif defined Q_OS_RELIANT
    131128        #define OS "Reliant UNIX"ARCH
    132         #define OSID quint8(22)
     129        #define OSID quint8(21)
    133130#elif defined Q_OS_SCO
    134131        #define OS "SCO OpenServer 5"ARCH
    135         #define OSID quint8(23)
     132        #define OSID quint8(22)
    136133#elif defined Q_OS_SOLARIS
    137134        #define OS "Sun Solaris"ARCH
     135        #define OSID quint8(23)
     136#elif defined Q_OS_SYMBIAN
     137        #define OS "Symbian"ARCH
    138138        #define OSID quint8(24)
    139139#elif defined Q_OS_ULTRIX
  • trunk/src/tspsolver.cpp

    r89 r90  
    123123                // Route with (nRow,nCol) path
    124124                right = new SStep();
     125                right->pNode = step;
    125126                right->matrix = step->matrix;
    126127                for (int k = 0; k < nCities; k++) {
     
    137138                // Route without (nRow,nCol) path
    138139                left = new SStep();
     140                left->pNode = step;
    139141                left->matrix = step->matrix;
    140142                left->matrix[nRow][nCol] = INFINITY;
     
    183185{
    184186        if (root != NULL)
    185                 deleteNode(root);
     187                deleteTree(root);
    186188}
    187189
     
    215217        mayNotBeOptimal = false;
    216218        if (root != NULL)
    217                 deleteNode(root);
     219                deleteTree(root);
    218220        QApplication::restoreOverrideCursor();
    219221}
    220222
    221 void CTSPSolver::deleteNode(SStep *&node)
    222 {
    223 //static int x;
    224 //      x++;
    225 //qDebug() << ">>>" << x;
    226         if (node->plNode != NULL)
    227                 deleteNode(node->plNode);
    228         if (node->prNode != NULL)
    229                 deleteNode(node->prNode);
    230         delete node;
    231         node = NULL;
    232 //qDebug() << "<<<" << x;
    233 //      x--;
     223void CTSPSolver::deleteTree(SStep *&root)
     224{
     225        if (root == NULL)
     226                return;
     227SStep *step = root;
     228SStep *parent;
     229        forever {
     230                if (step->plNode != NULL) {
     231                        // We have left child node - going inside it
     232                        step = step->plNode;
     233                        step->pNode->plNode = NULL;
     234                        continue;
     235                } else if (step->prNode != NULL) {
     236                        // We have right child node - going inside it
     237                        step = step->prNode;
     238                        step->pNode->prNode = NULL;
     239                        continue;
     240                } else {
     241                        // We have no child nodes. Deleting current one.
     242                        parent = step->pNode;
     243                        delete step;
     244                        if (parent != NULL) {
     245                                // Going back to the parent node.
     246                                step = parent;
     247                        } else {
     248                                // We came back to the root node. Finishing.
     249                                root = NULL;
     250                                break;
     251                        }
     252                }
     253        }
    234254}
    235255
  • trunk/src/tspsolver.h

    r89 r90  
    6363        SCandidate candidate; //!< A candiadate for branching in the current matrix
    6464        QList<SCandidate> alts; //!< A list of alternative branching candidates
     65        SStep *pNode; //!< Pointer to the parent step
    6566        SStep *plNode; //!< Pointer to the left branch step
    6667        SStep *prNode; //!< Pointer to the right branch step
     
    6970        SStep() {
    7071                price = -1;
    71                 plNode = prNode = NULL;
     72                pNode = plNode = prNode = NULL;
    7273        }
    7374};
     
    7677 * \brief This class solves Travelling Salesman Problem task.
    7778 * \author Copyright &copy; 2007-2010 Lёppa <contacts[at]oleksii[dot]name>
    78  *
    79  * \todo TODO: Deletion of solution tree on destroy and cleanup.
    8079 */
    8180class CTSPSolver
     
    10099        double align(TMatrix &matrix);
    101100        void cleanup();
    102         void deleteNode(SStep *&node);
     101        void deleteTree(SStep *&root);
    103102        QList<SCandidate> findCandidate(const TMatrix &matrix, int &nRow, int &nCol) const;
    104103        double findMinInCol(int nCol, const TMatrix &matrix, int exr = -1) const;
Note: See TracChangeset for help on using the changeset viewer.