MI RECORD,EXEC RUN

MI RECORD,EXEC RUN
Łukasz Orpik
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
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

Kopiuj
#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;
}

edytowany 1x, ostatnio: Łukasz Orpik
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:7 dni
0

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

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

No to wtedy to na 100%

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

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
Łukasz Orpik
wypisał jedynkę i zwrócił zero, bez żadnych problemów

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.