// matrix: The cost matrix to align // Returns a lower bound for the cost matrix double CTSPSolver::align(TMatrix &matrix) { double r = 0; double min; // Do row subtraction from the matrix with the min row value per row for (int k = 0; k < nCities; k++) { min = findMinInRow(k, matrix); if (min > 0) { r += min; if (min < MAX_DOUBLE) { subRow(matrix, k, min); } } } // Do col subtraction from the matrix with the min col value per col for (int k = 0; k < nCities; k++) { min = findMinInCol(k, matrix); if (min > 0) { r += min; if (min < MAX_DOUBLE) { subCol(matrix, k, min); } } } return (r != MAX_DOUBLE) ? r : INFINITY; }
double CTSPSolver::align(TMatrix &matrix) { double r = 0; double min; for (int k = 0; k < nCities; k++) { min = findMinInRow(k,matrix); if (min > 0) { r += min; if (min < MAX_DOUBLE) subRow(matrix,k,min); } } for (int k = 0; k < nCities; k++) { min = findMinInCol(k,matrix); if (min > 0) { r += min; if (min < MAX_DOUBLE) subCol(matrix,k,min); } } return (r != MAX_DOUBLE) ? r : INFINITY; }