BFS解决多源最短路相关leetcode算法题

news2025/2/7 3:09:04

文章目录

  • 1.01矩阵
  • 2.飞地的数量
  • 3.地图中的最高点
  • 4.地图分析

1.01矩阵

01矩阵
)

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
        //正难则反,找0到1的最短距离
        int m = mat.size(),n = mat[0].size();
        queue<pair<int,int>> q;
        //通过此数组对应位置的值既可以标识某个位置是否已访问过,也可在此基础上往外扩展
        vector<vector<int>> dist(m,vector<int>(n,-1));
        //if(dist[][] == -1) 表示此位置没被访问过
        //if(dist[][] != -1) 表示此位置被访问过
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(mat[i][j] == 0)
                {
                    dist[i][j] = 0;
                    q.push({i,j});
                }
            }
        }
        while(q.size())
        {
            auto [a,b] = q.front();q.pop();
            for(int i=0;i<4;i++)
            {
                int x = a+dx[i], y =b+dy[i];
                if(x>=0 && x<m && y>=0 && y<n && mat[x][y]&& dist[x][y]==-1)
                {
                    dist[x][y] = dist[a][b]+1;
                    q.push({x,y});
                }
            }
        }
        return dist;
    }
};

2.飞地的数量

飞地的数量
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
public:
    int numEnclaves(vector<vector<int>>& grid) {
        int m = grid.size(),n = grid[0].size();
        vector<vector<bool>> vis(m,vector<bool>(n));
        queue<pair<int,int>> q;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i==0||i==m-1||j==0||j==n-1)
                {
                    if(grid[i][j] == 1)
                    {
                        q.push({i,j});
                        vis[i][j] = true;
                    }
                }
            }
        }
        //多源BFS
        while(q.size())
        {
            auto [a,b] = q.front();
            q.pop();
            for(int k=0;k<4;k++)
            {
                int x = a+dx[k],y = b+dy[k];
                if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&& !vis[x][y])
                {
                    q.push({x,y});
                    vis[x][y] = true;
                }
            }
        }
        //遍历统计
        int ret = 0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j]==1 && !vis[i][j]) ret++;
            }
        }

        return ret;
    }
};

3.地图中的最高点

地图中的最高点
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
public:
    vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
        int m = isWater.size(), n=isWater[0].size();
        queue<pair<int,int>> q;
        vector<vector<int>> dist(m,vector<int>(n,-1));
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(isWater[i][j])
                {
                    q.push({i,j});
                    dist[i][j]=0;
                }
            }
        }
        //多源BFS
        while(q.size())
        {
            auto [a,b] = q.front();q.pop();
            for(int k=0;k<4;k++)
            {
                int x = a+dx[k],y=b+dy[k];
                if(x>=0&&x<m&&y>=0&&y<n&&dist[x][y] == -1)
                {
                    dist[x][y] = dist[a][b]+1;
                    q.push({x,y});
                }
            }
        }
        return dist;
    }
};

4.地图分析

地图分析
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
public:
    int maxDistance(vector<vector<int>>& grid) {
        //正难则反
        int m=grid.size(),n=grid[0].size();
        vector<vector<int>> dist(m,vector<int>(n,-1));
        queue<pair<int,int>> q;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j])
                {
                    dist[i][j] =0;
                    q.push({i,j});
                }
            }
        }
        //多源BFS
        int ret = -1;
        while(q.size())
        {
            auto[a,b] = q.front();q.pop();
            for(int k=0;k<4;k++)
            {
                int x = a+dx[k],y=b+dy[k];
                if(x>=0&& x<m && y>=0 && y<n && dist[x][y] == -1)
                {
                    dist[x][y] = dist[a][b]+1;
                    q.push({x,y});
                    ret = max(ret,dist[x][y]);
                }
            }
        }
        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1336525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于机器学习算法的数据分析师薪资预测模型优化研究(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【WordPress插件】热门关键词推荐v1.3.0 Pro开心版

介绍&#xff1a; WordPress插件-WBOLT热门关键词推荐插件&#xff08;Smart Keywords Tool&#xff09;是一款集即时关键词推荐、关键词选词工具及文章智能标签功能于一体的WordPress网站SEO优化插件。 智能推荐&#xff1a; 热门关键词推荐引擎-支持360搜索、Bing、谷歌&a…

【快刊录用】Springer旗下2区,1个21天录用,12天见刊!

网络安全类SCIE ☑️期刊简介&#xff1a;IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院3区 ☑️检索情况&#xff1a;SCIE 在检&#xff0c;正刊 ☑️征稿领域&#xff1a;提高安全性和隐私性的边缘/云的智能方法的研究&#xff0c;如数字孪生等 ☑️录用案…

如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…

Object.hashCode() 详解

在Java编程中&#xff0c;hashCode方法是一个常见而重要的概念。它通常用于哈希表、集合以及一些需要高效检索数据的数据结构中。然而&#xff0c;对于许多开发者来说&#xff0c;hashCode方法可能是一个容易被忽略或者被简单实现的部分。在本文中&#xff0c;我们将深入探讨Ja…

Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程

本教程将引导你在Azure平台完成对 gpt-35-turbo-0613 模型的微调。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&…

FreeRTOS的学习

1.创建函数和删除 动态创建为FreeRTOS分配的堆栈&#xff08;方便&#xff09;&#xff0c;而静态创建为人为分配空间。任务中必须有while&#xff08;1&#xff09;否则只会执行一次任务中的延时要用 vTaskDelay(500); 延时期间执行其它任务 任务中的延时使用的是软件…

Qt Creator可视化交互界面exe快速入门2

上一期介绍的通过代码的方式实现一个简单界面&#xff0c;需要敲小几十行代码&#xff0c;显然是效率低的&#xff0c;这期就介绍下Qt Creator的作用。 Qt Creator的使用&#xff1a; 首先打开我们的Qt Creator 然后点击创建项目&#xff0c;在项目Application里面选择Qt Wid…

网站在线客服系统推荐:提升客户体验与满意度

精致的前端页面可以提供访客的用户体验感&#xff0c;连接响应迅速可以帮助客服人员及时联系到访客帮助其解决问题&#xff0c;访客来源明细可以帮助客服人员更加清楚的了解用户需求以展开更有针对性的营销&#xff0c;操作方便有助于公司迅速培训员工&#xff0c;同时也方便客…

Appium如何实现移动端UI自动化测试呢?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用Appium&#xff1f;如何搭建Appium工具环境?(超详细&#xff09;通过demo演示Appium的使用Appium如何实现移动端UI自…

一文速览字节最新分布式操作系统KubeWharf

一文速览字节最新分布式操作系统KubeWharf KubeWharf 是字节跳动基础架构团队在对 Kubernetes 进行了大规模应用和不断优化增强之后的技术结晶。 这是一套以 Kubernetes 为基础构建的分布式操作系统&#xff0c;由一组云原生组件构成&#xff0c;专注于提高系统的可扩展性、功…

绝地反击,不做背锅侠!

那么作为运维人员&#xff0c;如何摆脱以上背黑锅的尴尬局面呢&#xff1f;堡垒机当然是破解此局面的绝杀大招。 1.统一登录入口 提供统一入口&#xff0c;集中管理和分配账户密码、所有运维人员只能登录堡垒机才能访问服务器&#xff0c;梳理“人与服务器”之间的关系&#…

案例169:基于微信小程序的小区疫情防控系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

各种不同的安科瑞电力物联网仪表实现互联互通

安科瑞 崔丽洁 电力物联网是物联网在智能电网中的应用&#xff0c;是有效整合通信基础设施资源和电力基础设施资源&#xff0c;提高电力系统信息化水平&#xff0c;改善电力系统现有基础设施利用效率的重要举措。 电力物联网仪表为终端感知设备&#xff0c;该系列产品将我们多年…

2015年第四届数学建模国际赛小美赛B题南极洲的平均温度解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 B题 南极洲的平均温度 原题再现&#xff1a; 地表平均温度是反映气候变化和全球变暖的重要指标。然而&#xff0c;在以前的估计中&#xff0c;在如何界定土地平均数方面存在一些方法上的差异。为简单起见&#xff0c;我们只考虑南极洲。请建…

掌握ElasticSearch(一):Elasticsearch安装与配置、Kibana安装

文章目录 〇、简介1.Elasticsearch简介2.典型业务场景3.数据采集工具4.名词解释 一、安装1.使用docker(1)创建虚拟网络(2)Elasticsearch安装步骤 2.使用压缩包 二、配置1.目录介绍2.配置文件介绍3.elasticsearch.yml节点配置4.jvm.options堆配置 二、可视化工具Kibana1.介绍2.安…

C++图论之强连通图

1. 连通性 什么是连通性&#xff1f; 连通&#xff0c;字面而言&#xff0c;类似于自来水管道中的水流&#xff0c;如果水能从某一个地点畅通流到另一个地点&#xff0c;说明两点之间是连通的。也说明水管具有连通性&#xff0c;图中即如此。 无向图和有向图的连通概念稍有差…

RFID技术在汽车制造:提高生产效率、优化物流管理和增强安全性

RFID技术在汽车制造:提高生产效率、优化物流管理和增强安全性 随着科技的进步&#xff0c;物联网技术已经深入到各个领域&#xff0c;尤其在制造业中&#xff0c;RFID技术以其独特的优势&#xff0c;如高精度追踪、实时数据收集和自动化操作&#xff0c;正在改变传统的生产方式…

数字人直播一比一克隆:实现虚拟与现实的完美融合

数字人直播一比一克隆技术作为当今科技领域的一项重要突破&#xff0c;将虚拟与现实完美融合&#xff0c;引发了广泛的关注和讨论。这项技术不仅能够创造一个以数字人为基础的虚拟世界&#xff0c;同时也能够将真实人物复制到数字化的平台上进行直播&#xff0c;让观众在屏幕前…

轻量级开源服务器Tomcat本地部署并将网页发布到公网远程访问

目录 1.前言 2.本地Tomcat网页搭建 2.1 Tomcat安装 2.2 配置环境变量 2.3 环境配置 2.4 Tomcat运行测试 2.5 Cpolar安装和注册 3.本地网页发布 3.1.Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通…