【剑斩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;
    }
};
相关推荐
A尘埃8 小时前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹8 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
不穿格子的程序员8 小时前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物8 小时前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
hqyjzsb8 小时前
盲目用AI提效?当心陷入“工具奴”陷阱,效率不增反降
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·远程工作
铉铉这波能秀8 小时前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士8 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法
仟濹8 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)8 小时前
欠采样时的相位倒置问题
算法
历程里程碑8 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法