15.优化算法之BFS最短路问题2

0.算法

1.迷宫中离⼊⼝最近的出⼝

. - 力扣(LeetCode)

class Solution {int[] dx = { 0, 0, -1, 1 };int[] dy = { 1, -1, 0, 0 };public int nearestExit(char[][] maze, int[] e) {int m = maze.length, n = maze[0].length;boolean[][] vis = new boolean[m][n];Queue<int[]> q = new LinkedList<>();q.add(new int[] { e[0], e[1] });vis[e[0]][e[1]] = true;int step = 0;while (!q.isEmpty()) {step++;int sz = q.size();for (int i = 0; i < sz; i++) {int[] t = q.poll();int a = t[0], b = t[1];for (int j = 0; j < 4; j++) {int x = a + dx[j], y = b + dy[j];if (x >= 0 && x < m && y >= 0 && y < n && maze[x][y] == '.' && !vis[x][y]) {// 判断是否已经到出⼝if (x == 0 || x == m - 1 || y == 0 || y == n - 1)return step;vis[x][y] = true;q.add(new int[] { x, y });}}}}return -1;}
}

 2.最小基因变化

433. 最小基因变化 - 力扣(LeetCode)

 

class Solution {public int minMutation(String startGene, String endGene, String[] bank) {Set<String> vis = new HashSet<>(); // ⽤来标记已经搜索过的状态Set<String> hash = new HashSet<>(); // ⽤来统计基因库⾥⾯的字符串for (String s : bank)hash.add(s);char[] change = { 'A', 'C', 'G', 'T' };if (startGene.equals(endGene))return 0;if (!hash.contains(endGene))return -1;Queue<String> q = new LinkedList<>();q.add(startGene);vis.add(startGene);int step = 0;while (!q.isEmpty()) {step++;int sz = q.size();while (sz-- != 0) {String t = q.poll();for (int i = 0; i < 8; i++) {char[] tmp = t.toCharArray();for (int j = 0; j < 4; j++) {tmp[i] = change[j];String next = new String(tmp);if (hash.contains(next) && !vis.contains(next)) {if (next.equals(endGene))return step;q.add(next);vis.add(next);}}}}}return -1;}
}

 3.单词接龙

127. 单词接龙 - 力扣(LeetCode)

class Solution {public int ladderLength(String beginWord, String endWord, List<String> wordList) {Set<String> hash = new HashSet<>();for (String s : wordList)hash.add(s);Set<String> vis = new HashSet<>(); // 标记已经搜索过的单词if (!hash.contains(endWord))return 0;Queue<String> q = new LinkedList<>();q.add(beginWord);vis.add(beginWord);int ret = 1;while (!q.isEmpty()) {ret++;int sz = q.size();while (sz-- != 0) {String t = q.poll();for (int i = 0; i < t.length(); i++) {char[] tmp = t.toCharArray();for (char ch = 'a'; ch <= 'z'; ch++) {tmp[i] = ch;String next = new String(tmp);if (hash.contains(next) && !vis.contains(next)) {if (next.equals(endWord))return ret;q.add(next);vis.add(next);}}}}}return 0;}
}

4.为高尔夫比赛砍树

675. 为高尔夫比赛砍树 - 力扣(LeetCode)

class Solution {int m, n;public int cutOffTree(List<List<Integer>> f) {m = f.size();n = f.get(0).size();List<int[]> trees = new ArrayList<>();for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (f.get(i).get(j) > 1)trees.add(new int[] { i, j });Collections.sort(trees, (a, b) -> {return f.get(a[0]).get(a[1]) - f.get(b[0]).get(b[1]);});int bx = 0, by = 0;int ret = 0;for (int[] next : trees) {int a = next[0], b = next[1];int step = bfs(f, bx, by, a, b);if (step == -1)return -1;ret += step;bx = a;by = b;}return ret;}int[] dx = { 0, 0, 1, -1 };int[] dy = { 1, -1, 0, 0 };public int bfs(List<List<Integer>> f, int bx, int by, int ex, int ey) {if (bx == ex && by == ey)return 0;Queue<int[]> q = new LinkedList<>();boolean[][] vis = new boolean[m][n];q.add(new int[] { bx, by });vis[bx][by] = true;int step = 0;while (!q.isEmpty()) {int sz = q.size();step++;while (sz-- != 0) {int[] t = q.poll();int a = t[0], b = t[1];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 && f.get(x).get(y) != 0 && !vis[x][y]) {if (x == ex && y == ey)return step;q.add(new int[] { x, y });vis[x][y] = true;}}}}return -1;}
}

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

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

相关文章

智能光伏开发都能用到什么软件和工具?

随着全球对可再生能源的日益重视和光伏技术的快速发展&#xff0c;智能光伏开发已成为推动能源转型的重要力量。在光伏项目的全生命周期中&#xff0c;从设计、建设到运营管理&#xff0c;各种软件和工具的应用发挥着至关重要的作用。 一、光伏系统设计软件 1、PVsyst PVsyst…

绝地求生PUBG点击开始游戏一直在加载不读条计时间的解决办法

绝地求生PUBG作为一款引领潮流的大逃杀游戏&#xff0c;凭借其紧张刺激的对抗体验赢得了全球玩家的喜爱。 即使是游戏已经上线很长时间了&#xff0c;但是游戏现在依旧是很火爆&#xff0c;还有很多玩家下载游戏进行游玩。然而&#xff0c;一些为玩家在游戏中遇到了点击开始游戏…

【ue5】虚幻5同时开多个项目

正常开ue5项目我是直接在桌面点击快捷方式进入 只会打开一个项目 如果再想打开一个项目需要进入epic 再点击启动就可以再开一个项目了

市场表现低迷,本周期的山寨币还有投资机会吗?

近年来&#xff0c;加密货币行业经历了巨大的波动和变革。尽管比特币和以太坊的价格走势持续向好&#xff0c;但山寨币市场的表现却令人失望。在这一轮牛市中&#xff0c;比特币和以太坊吸引了大量资金&#xff0c;而许多投资者对山寨币的信心却处于低谷。这让许多投资组合的回…

C++|海康摄像头实时预览时设置音量大小

使用海康API设置音量的函数是&#xff1a;NET_DVR_OpenSound。 在实际代码中我遇到了以下问题&#xff1a; 1&#xff1a;调用NET_DVR_OpenSound接口一直返回失败&#xff0c;错误是调用顺序出错。 2&#xff1a;音量设置不成功。 对于以上两种问题&#xff0c;我相信很多人…

数据库国产化之路(一)

数据库国产化之路(一) 1、前言&#xff1a;适配海量数据库过程中的一些记录&#xff0c;备忘用 2、海量数据库基于的pg版本&#xff0c;查看PG_VERSION文件为9.2。 3、MySQL中的IF函数替代&#xff0c;一开始的方案是从网上找了个if函数&#xff0c;后来发现CASE WHEN其实能完成…

公共事件应急日常管理系统-计算机毕业设计源码40054

公共事件应急日常管理系统的设计与实现 摘 要 本研究基于Spring Boot框架&#xff0c;设计并实现了公共事件应急日常管理系统&#xff0c;旨在提升公共事件的应急响应和日常管理效率。系统包括应急资源管理、物资申请管理、物资发放管理、应急培训管理、科普宣教管理、公共事件…

SOLIDWORKS分期许可(订阅形式),降低前期的投入成本!

SOLIDWORKS 分期许可使您能够降低前期软件成本&#xff0c;同时提供对 SOLIDWORKS 新版本和升级程序的即时访问&#xff0c;以及在每个期限结束时调整产品的灵活性&#xff0c;帮助您跟上市场需求和竞争压力的步伐。 目 录&#xff1a; ★ 1 什么是SOLIDWORKS分期许可 ★ 2 …

网安小贴士(8)IPv4与IPv6

一、前言 IPv4和IPv6都是互联网协议&#xff08;IP&#xff09;的版本&#xff0c;它们用于在互联网上标识和定位设备。 二、定义 IPv4&#xff08;互联网协议第四版&#xff09;&#xff1a; IPv4是互联网协议的第一个广泛使用的版本&#xff0c;最初在1981年被标准化为RFC 7…

鸿蒙 HarmonyOS Next 路由 不废话 全干货

一、页面的创建 &#xff08;1&#xff09;直接通过创建一个新的Page的方式创建 &#xff08;2&#xff09;先创建一个 ArkTs File文件&#xff0c;然后在resources/base/profile/main_pages.json中加上页面对应的src路径&#xff0c;下面的Index_3.ets文件是通过创建ArkTs Fi…

【高性能服务器】select模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 IO多路复用就是复用…

基于DMAIC降低气缸体水套芯磕碰伤率

在制造业的激烈竞争中&#xff0c;产品质量的提升一直是企业追求的目标。气缸体作为汽车发动机的核心部件&#xff0c;其生产过程中的质量控制尤为重要。今天&#xff0c;深圳天行健企业管理咨询公司就来分享一下如何运用DMAIC&#xff08;定义、测量、分析、改进、控制&#x…

INTERCONNECT 使用脚本导入 Element Library 的器件

INTERCONNECT 使用脚本导入 Element Library 的器件 正文示例1示例2正文 在 INTERCONNECT 添加自定义器件到 Custom 文件夹下 一文中,我们介绍了如何将器件或者自定义器件添加到用户自定义的库中。那么我们如何从 Element Library 中导入我们需要的器件呢? 最简单的方式就是…

centos下编译安装redis最新稳定版

一、目标 编译安装最新版的redis 二、安装步骤 1、redis官方下载页面 Downloads - Redis 2、下载最新版的redis源码包 注&#xff1a;此时的最新稳定版是 redis 7.2.5 wget https://download.redis.io/redis-stable.tar.gz 3、安装编译环境 yum install -y gcc gcc-c …

计算机的错误计算(二十一)

摘要 两个不相等数相减&#xff0c;差为0&#xff1a; ? 在计算机的错误计算&#xff08;十九&#xff09;中&#xff0c;高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式&#xff0c;计算机的输出为0. 在 Python 中计算 &#xff1a; 则输出为0. 若用 C…

配置基于不同的主机名的虚拟主机

修改配置文件 <virtualhost 192.168.209.140:80> documentroot /www/haha servername www.haha.com </virtualhost><virtualhost 192.168.209.140:80> documentroot /www/xixi servername www.xixi.com </virtualhost>添加192.168.209.140IP地址 [ro…

【网络安全的神秘世界】SQL注入(下)

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 3.7 二次注入 不好挖这个漏洞&#xff0c;需要搞懂业务逻辑关系 二次注入通常是指在存入数据库时做了过滤&#xff0c;但是取…

创建react的脚手架

Create React App 中文文档 (bootcss.com) 网址&#xff1a;creat-react-app.bootcss.com 主流的脚手架&#xff1a;creat-react-app 创建脚手架的方法&#xff1a; 方法一&#xff08;JS默认&#xff09;&#xff1a; 1. npx create-react-app my-app 2. cd my-app 3. …

视频提取字幕怎么弄?5个快速获取视频字幕的方法

在忙碌而又充满活力的生活中&#xff0c;我们常常在通勤路上和午休间隙通过视频来获取信息和放松心情。 但有时候&#xff0c;我们想把视频里那些令人难忘的瞬间或关键信息保存下来&#xff0c;方便以后回顾或者分享。然而&#xff0c;手动摘录不仅费时&#xff0c;还容易漏掉…

Python爬取豆瓣电影+数据可视化,爬虫教程!

1. 爬取数据 1.1 导入以下模块 import os import re import time import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent from openpyxl import Workbook, load_workbook1.2 获取每页电影链接 def getonepagelist(url,headers):try:r reque…