예제 #1
0
// 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;
}
예제 #2
0
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;
}