samedi 4 avril 2020

C++ pushing back a string by value in a vector

I'm doing some algorithmics problem and I'm having trouble with managing functions, vectors and strings in C++.

I have to find a concrete path in a matrix and for that, I need to have all the different paths, so I decided to use a function. This function will check where to continue to search. Here is the code of the function:

vector<string> get_best_path(string actual, int rows, int columns, int col_actual, int row_prev) {
    vector<string> solutions;
    int row_actual = (rows+row_prev-1)%rows;

    for (int i = 0; i < 3; i++) {

        cout << col_actual << " " << row_actual << "\n";
        //cout << (dp[row_prev][col_actual+1] - matrix[row_prev][col_actual+1]) << " " << dp[row_actual][col_actual] << "\n";
        if( (dp[row_prev][col_actual+1] - matrix[row_prev][col_actual+1]) == dp[row_actual][col_actual] ) {

            if (col_actual > 0) {

                //cout << "--" << actual << " " << row_actual << "\n";
                string branch = actual + to_string(row_actual+1) + " ";
                solutions = get_best_path(branch, rows, columns, col_actual-1, row_actual);
                //cout << ".." << actual << "\n"; 

            } else {

                //cout << actual << " " << row_actual << "\n";
                cout << actual << "\n";
                string branch = actual.c_str();
                branch += to_string(row_actual+1);
                cout << branch << "\n";
                solutions.push_back( branch );
                break;

            }

        }
        row_actual = (row_actual+1)%rows;

    }
    for(auto i : solutions) cout << "--" << i << "\n";

    return solutions;

}

And here is the call to the method:

vector<string> solutions;
for (int i = 0; i < rows; i++) {

    if (dp[i][cols-1] == min_path) {

        cout << "................\n";
        solutions = get_best_path( (to_string(i+1)+" "), rows, cols, cols-2, i);
        for(auto i : solutions) {
            reverse(i.begin(), i.end());
            cout << i << "\n";
        }
        cout << "xxxxxxxxxxxxxxx\n";

    }

}

The thing is that I'm getting three paths for a given example, which is correct, but they are all the same string, which is the last path or the last change done in variable branch.

Maybe I'm mixing a lot of concepts and maybe this has been answered a lot of times, but I've searched this and got nothing.

Thanks for the time if you have read this :D!

Aucun commentaire:

Enregistrer un commentaire