1102. 得分最高的路径


题目描述

给你一个 R 行 C 列的整数矩阵 A。矩阵上的路径从 [0,0] 开始,在 [R-1,C-1] 结束。
路径沿四个基本方向(上、下、左、右)展开,从一个已访问单元格移动到任一相邻的未访问单元格。
路径的得分是该路径上的 最小 值。例如,路径 8 →  4 →  5 →  9 的值为 4 。
找出所有路径中得分 最高 的那条路径,返回其 得分。

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

解决方案

BFS+优先队列

class Solution {
public:
    struct Point {
        int x;
        int y;
        int val;

        Point(int x, int y, int val) {
            this->x=x;
            this->y=y;
            this->val=val;
        }

        bool operator < (const struct Point &rhs) const {
            return val > rhs.val;
        }
    };

    int maximumMinimumPath(vector>& grid) {
        int r=grid.size();
        int c=grid[0].size();
        int ans=grid[0][0];
        vector> direction{{-1,0},{0,1},{1,0},{0,-1}};
        priority_queue q;
        vector> visited(r, vector(c, false));

        q.emplace(0,0,grid[0][0]);
        visited[0][0]= true;
        while (!q.empty()) {
            auto item=q.top();
            q.pop();
            ans=min(ans,item.val);
            if (item.x==r-1&&item.y==c-1) {
                return ans;
            }
            for (auto offset:direction) {
                int x=item.x+offset[0];
                int y=item.y+offset[1];
                if (x>=0&&x=0&&y