MI RECORD,EXEC RUN

0

Hejo,
próbuję zaimplementować algorytm komiwojażera wykorzystując metody klasy do redukcji wartości w kolumnach i wierszach. Problem polega na tym że cały program kompiluje się, ale gdy próbuję wywołać metodę min_col lub min_row to wyskakuje mi błąd Failed to process MI Record exec run. Może mi ktoś powiedzieć na czym polega ten błąd, ponieważ na internecie nie znalazłem żadnej informacji na jego temat? Z góry wielkie dzięki

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <xmath.h>
#define None -1


class CostMatrix {
public:
    CostMatrix(std::vector<std::vector<double>> cost_matrix) { matrix_ = cost_matrix; }

    void show_matrix();

    void min_col();

    void min_row();

private:
    std::vector<std::vector<double>> matrix_;
};

void CostMatrix::show_matrix(){
    std::cout<<"["<<std::endl;
    for (std::vector<double> row : matrix_) {
        std::cout<<"{";
        for (double i : row) {
            std::cout<<i<<","<<" ";
        };
       std::cout<<"}"<<std::endl;
    };
    std::cout<<"]";


}
void CostMatrix::min_col() {
    double min;
    std::vector<double> min_vec;
    for (int i = 0; i < matrix_[0].size(); i++) {
        min = None;
        for (std::vector<double> row : matrix_) { //znajdowanie minimum w kolumnach
            if (row[i] < min || min == None) {
                min = row[i];
            }
        };
        min_vec[i] = min;
    };

    for (int i = 0; i < matrix_[0].size(); i++) {
        for (std::vector<double> row : matrix_) { //odejmowanie minimum w rzedach
            row[i] = row[i] - min_vec[i];
        };
    };


}

void CostMatrix::min_row() {
    std::vector<double> min_vec;
    int pos = 0;
    for (std::vector<double> row : matrix_) {
        pos++;
        double min = None;
        for (int i = 0; i < matrix_[0].size(); i++) { //znajdowanie minimum w kolumnach
            if (row[i] < min || min == None) {
                min = row[i];
            }
        };
        min_vec[pos] = min;
    };

    pos=0;
    for (std::vector<double> row : matrix_) {
        for (int i = 0; i < matrix_[0].size(); i++) {
            row[i] = row[i] - min_vec[pos];
        };
        pos++;
    };


}


int main() {

    std::vector<std::vector<double>> cities{
            {INF, 10, 8,   19, 12},
            {10, INF, 20,  6,  3},
            {8,   20, INF, 4,  2},
            {19,  6,  4, INF,  7},
            {12,  3,  2,   7, INF}
    };

    CostMatrix cities_matrix(cities);
    cities_matrix.show_matrix();
    cities_matrix.min_row();
    std::cout<<"redukcja kolumn"<<std::endl;
    cities_matrix.show_matrix();

    return 0;
}

0

sprawdź jak się zachowa następujący kod:

double x=INF;
if(x>0) cout<<x<endl;

No to wtedy to na 100%

    std::vector<double> min_vec(matrix_[0].size());
    std::vector<double> min_vec(matrix_.size());

1 użytkowników online, w tym zalogowanych: 0, gości: 1