打印最优路径

来源:互联网 发布:印度南部 知乎 编辑:程序博客网 时间:2024/06/09 15:43

还是DP问题

const int N = 5;struct COORDINATE{        int i;        int j;        COORDINATE(int x, int y) : i(x), j(y) {}};void PrintPath(int A[N][N]){        int DP[N][N];        DP[0][0] = A[0][0];        for (int i = 1; i < N; i++)        {                DP[0][i] = DP[0][i-1] + A[0][i];        }        for (int i = 1; i < N; i++)        {                for (int j = 0; j < N; j++)                {                        if (0 == j)                                DP[i][j] = DP[i-1][j] + A[i][j];                        else                                DP[i][j] = A[i][j] + max(DP[i][j-1], DP[i-1][j]);                }        }        stack<COORDINATE> stk;        int x = N-1;        int y = N-1;        while(x != 0 || y != 0)        {                stk.push(COORDINATE(x, y));                if (0 == x)                        y--;                else if (0 == y)                        x--;                else                {                        if (DP[x][y] == A[x][y] + DP[x-1][y])                                x--;                        else                                y--;                }        }        stk.push(COORDINATE(0, 0));        while (!stk.empty())        {                cout<<"("<<stk.top().i<<","<<stk.top().j<<")"<<endl;                stk.pop();        }}


0 0
原创粉丝点击