使用动态编程在矩阵的所有可能路径中以最小的总和打印路径

时间:2019-04-28 05:28:11

标签: c++ matrix dynamic-programming

我想打印允许您向右或向下移动的矩阵的最小和。我能够获得成本,但是我不确定如何在所有可能的路径中以最小的总和来打印路径。

#include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;

    #define M 3
    #define N 3

    int findMinCost(int cost[M][N])
    {
        int T[M][N];

        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < N; j++)
            {
                T[i][j] = cost[i][j];

                if (i == 0 && j > 0)
                    T[0][j] += T[0][j - 1];

                else if (j == 0 && i > 0)
                    T[i][0] += T[i - 1][0];

                else if (i > 0 && j > 0)
                    T[i][j] += min(T[i - 1][j], T[i][j - 1]);

            }
        }

        return T[M - 1][N - 1];
    }

    int main()
    {
        int cost[M][N] =
        {
            { 9,-2,10 },
            { 15,23,-10 },
            { 40,16,2 },
        };

        cout << "The minimum cost is " << findMinCost(cost);

        return 0;
    }

1 个答案:

答案 0 :(得分:2)

您可以使用# Removing the prefixes from column names df_a = df[['a_id', 'a_region', 'a_ip']].rename(columns=lambda x: x[2:]) df_b = df[['b_id', 'b_region', 'b_ip']].rename(columns=lambda x: x[2:]) # Find rows where all values are in the other matched = df_a.isin(df_b).all(axis=1) # Get actual rows with boolean indexing df_a.loc[matched] # ... or add boolean flag to dataframe df['flag'] = matched 的另一个二维数组来存储为达到最佳解而采用的路径的索引。

重构解决方案

  1. 要重建解决方案,请声明std::pair以存储最后一条路径,以得出最佳解决方案。

path

  1. 在您的内部循环中,每次计算std::pair<int,int> path[M][N]时,还要计算T[i][j]

    path[i][j]
  2. 最后,使用if (i == 0 && j > 0) { T[0][j] += T[0][j - 1]; path[0][j] = std::make_pair(0, j - 1); } else if (j == 0 && i > 0) { T[i][0] += T[i - 1][0]; path[i][0] = std::make_pair(i - 1, 0); } else if (i > 0 && j > 0) { if (T[i - 1][j] < T[i][j - 1]) { T[i][j] += T[i - 1][j]; path[i][j] = std::make_pair(i - 1, j); } else { T[i][j] += T[i][j - 1]; path[i][j] = std::make_pair(i, j - 1); } } 数组通过以下递归函数重构解决方案(也可以将其转换为迭代解决方案)

    path

演示:here