zoukankan      html  css  js  c++  java
  • 5548. 最小体力消耗路径 二分

    你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。

    一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。

    请你返回从左上角走到右下角的最小 体力消耗值 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/path-with-minimum-effort
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    最小化最大值->二分答案
    然后正常宽搜

    class Solution {
    public:
        int dir[4][2] = {0,1,0,-1,1,0,-1,0};
        struct Node {
            int x, y;
            Node(int x, int y):x(x), y(y){}
        };
    
        int minimumEffortPath(vector<vector<int>>& G) {
            int n = G.size();
            int m = G[0].size();
    
            vector <vector<bool>> vis = vector(n, vector<bool>(m, false));
            int ans = 0;        
    
    
            int l = 0, r = 999999;
            while (l <= r) {
                int mid = l + ((r - l) / 2);
                vis = vector(n, vector<bool>(m, false));
                queue <Node> q;
                q.emplace(Node(0, 0));
                vis[0][0] = true;
                while (!q.empty()) {
                    
                    Node node = q.front();
                    int x = node.x;
                    int y = node.y;
                    q.pop();
                    for (int i = 0; i < 4; i++) {
                        int tx = x + dir[i][0];
                        int ty = y + dir[i][1];
                        if (tx >= 0 && tx < n && ty >= 0 && ty < m && 
                        !vis[tx][ty] && abs(G[x][y] - G[tx][ty]) <= mid) {
                            q.emplace(Node(tx, ty));
                            vis[tx][ty] = true;
                        }
                    }
                }
                if (vis[n - 1][m - 1]) {
                    ans = mid;
                    r = mid - 1;
                }
                else {
                    l = mid + 1;
                }
            }
    
            return ans;
        }
    };
    
  • 相关阅读:
    sparksql解析流程
    推荐算法简介:基于用户的协同过滤、基于物品的协同过滤、基于内容的推荐
    数据中台
    拉链表
    大数据去重与布隆过滤器
    推荐算法简介
    java获取resources文件夹中文件的路径
    Flink中设置事件时间
    [转载]REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
    使用Gson或者jackson代替Fastjson
  • 原文地址:https://www.cnblogs.com/xgbt/p/13873261.html
Copyright © 2011-2022 走看看