【剑斩OFFER】算法的暴力美学——力扣 1162 题:地图分析

一、题目描述

二、算法原理

思路:使用多源 BFS 算法

1)先创建一个二维数组来统计距离,再标记陆地的距离为 0,此时把陆地的坐标入队列

2)使用 BFS 算法统计陆地到上下左右的海洋的距离:

3)此时当队列为空时,此时当前坐标的值就是陆地到海洋的最大距离;

三、代码实现

cpp 复制代码
class Solution {
    int dx[4] = {0,0,-1,1};
    int dy[4] = {1,-1,0,0};
    typedef pair<int,int> PII;
public:
    int maxDistance(vector<vector<int>>& grid) {
        //使用多源 BFS
        int n = grid.size(),m = grid[0].size();
        vector<vector<int>> vis(n,vector<int>(m,-1));//统计陆地到海洋的距离
        queue<PII> que;
        for(int i = 0; i < n; i++)//标记陆地的距离为0
        {
            for(int j = 0; j < m;  j++)
            {
                if(grid[i][j] == 1)
                {
                    vis[i][j] = 0;
                    que.push({i,j});//让陆地的坐标入队列
                }
            }
        }

        while(que.size())//BFS
        {
            auto [x,y] = que.front();
            que.pop();

            for(int i = 0; i < 4; i++)
            {
                int a = x + dx[i];
                int b = y + dy[i];
                if(a >= 0 && b >= 0 && a < n && b < m && vis[a][b] == -1 && grid[a][b] == 0)
                {
                    vis[a][b] = vis[x][y] + 1;
                    que.push({a,b});
                }
            }

            if(que.empty() && vis[x][y]) return vis[x][y];//陆地到海洋的最大距离
        }
        return -1;
    }
};
相关推荐
yi0118 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
YangYang9YangYan8 小时前
2027 秋招|数据科学与大数据技术面试项目价值回答思路,告别纯代码描述
大数据·面试·职场和发展
灯澜忆梦10 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下10 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J11 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛11 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有11 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu11111111 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS12 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b12 小时前
算法日常・每日刷题--<动态规划>14
算法