leetcode 1102. 得分最高的路径(C++)

给你一个 R 行 C 列的整数矩阵 A。矩阵上的路径从 [0,0] 开始,在 [R-1,C-1] 结束。

路径沿四个基本方向(上、下、左、右)展开,从一个已访问单元格移动到任一相邻的未访问单元格。

路径的得分是该路径上的 最小 值。例如,路径 8 →  4 →  5 →  9 的值为 4 。

找出所有路径中得分 最高 的那条路径,返回其 得分

示例 1:

输入:[[5,4,5],[1,2,6],[7,4,6]]
输出:4
解释: 
得分最高的路径用黄色突出显示。 

示例 2:

输入:[[2,2,1,2,2,2],[1,2,2,2,1,2]]
输出:2

示例 3:

输入:[[3,4,6,3,4],[0,2,1,1,7],[8,8,3,2,7],[3,2,4,9,8],[4,1,2,0,0],[4,6,5,4,3]]
输出:3

提示:

  1. 1 <= R, C <= 100
  2. 0 <= A[i][j] <= 10^9

C++

class Solution {
public:
    class stu
    {
    public:
        int val;
        vector<int> location;
        stu(int value,vector<int> loc)
        {
            val=value;
            location=loc;
        }
    };
    
    struct cmp
    {
        bool operator()(stu& A, stu& B)
        {
            return A.val<B.val;
        }
    };
    
    int maximumMinimumPath(vector<vector<int>>& A) 
    {
        int m=A.size();
        int n=A[0].size();
        vector<vector<int>> flag(m,vector<int>(n,0));
        priority_queue<stu,vector<stu>,cmp> que;
        que.push(stu(A[0][0],{0,0}));
        flag[0][0]=1;
        while(que.size())
        {
            auto it=que.top();
            que.pop();
            auto val=it.val;
            auto point=it.location;
            int r=point[0];
            int c=point[1];
            if(r==m-1 && c==n-1)
            {
                return val;
            }
            if(r-1>=0)
            {
                if(0==flag[r-1][c])
                {
                    flag[r-1][c]=1;
                    auto tmp=min(val,A[r-1][c]);
                    que.push(stu(tmp,{r-1,c}));
                }
            }
            if(r+1<m)
            {
                if(0==flag[r+1][c])
                {
                    flag[r+1][c]=1;
                    auto tmp=min(val,A[r+1][c]);
                    que.push(stu(tmp,{r+1,c}));
                }
            }
            if(c-1>=0)
            {
                if(0==flag[r][c-1])
                {
                    flag[r][c-1]=1;
                    auto tmp=min(val,A[r][c-1]);
                    que.push(stu(tmp,{r,c-1}));
                }
            }
            if(c+1<n)
            {
                if(0==flag[r][c+1])
                {
                    flag[r][c+1]=1;
                    auto tmp=min(val,A[r][c+1]);
                    que.push(stu(tmp,{r,c+1}));
                }
            }            
        }
        return -1;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/94478368