算法日常・每日刷题--<BFS最短路径>4
675. 为高尔夫比赛砍树 - 力扣LeetCode675. 为高尔夫比赛砍树 - 你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示 在这个矩阵中 * 0 表示障碍无法触碰 * 1 表示地面可以行走 * 比 1 大的数 表示有树的单元格可以行走数值表示树的高度每一步你都可以向上、下、左、右四个方向之一移动一个单位如果你站的地方有一棵树那么你可以决定是否要砍倒它。你需要按照树的高度从低向高砍掉所有的树每砍过一颗树该单元格的值变为 1即变为地面。你将从 (0, 0) 点开始工作返回你砍完所有树需要走的最小步数。 如果你无法砍完所有的树返回 -1 。可以保证的是没有两棵树的高度是相同的并且你至少需要砍倒一棵树。 示例 1[https://assets.leetcode.com/uploads/2020/11/26/trees1.jpg]输入forest [[1,2,3],[0,0,4],[7,6,5]]输出6解释沿着上面的路径你可以用 6 步按从最矮到最高的顺序砍掉这些树。示例 2[https://assets.leetcode.com/uploads/2020/11/26/trees2.jpg]输入forest [[1,2,3],[0,0,0],[7,6,5]]输出-1解释由于中间一行被障碍阻塞无法访问最下面一行中的树。示例 3输入forest [[2,3,4],[0,0,5],[8,7,6]]输出6解释可以按与示例 1 相同的路径来砍掉所有的树。(0,0) 位置的树可以直接砍去不用算步数。 提示 * m forest.length * n forest[i].length * 1 m, n 50 * 0 forest[i][j] 109https://leetcode.cn/problems/cut-off-trees-for-golf-event/description/题目核心理解规则必须按照树高度从小到大依次砍树不能乱序每次砍完树该位置变为地面1地图0 障碍不能走1 地面1 树可通行起点(0,0)每上下左右移动一格算一步求全部砍完的最小总步数无法完成返回-1关键点两棵树高度互不相同整体解题思路收集所有树遍历矩阵把所有高度 1 的树记录(高度, x坐标, y坐标)排序树列表按照高度升序确定砍树顺序逐段 BFS 求最短路径初始起点cur_x0, cur_y0依次取出下一棵要砍的树坐标BFS 求【当前位置 → 目标树】的最短步数一旦某一段 BFS 不可达直接返回-1累加步数更新当前坐标为目标树坐标全部遍历完成返回总步数#include vector #include queue #include algorithm using namespace std; class Solution { public: int dx[4] {0, 0, 1, -1}; int dy[4] {1, -1, 0, 0}; int m, n; // BFS求起点(sx,sy) 到终点(tx,ty) 的最短距离不可达返回 -1 int bfs(vectorvectorint forest, int sx, int sy, int tx, int ty) { if(sx tx sy ty) return 0; vectorvectorbool vis(m, vectorbool(n, false)); queuepairint, int q; q.push({sx, sy}); vis[sx][sy] true; int step 0; while(!q.empty()) { int sz q.size(); step; for(int i 0; i sz; i) { auto [x, y] q.front(); q.pop(); for(int d 0; d 4; d) { int nx x dx[d]; int ny y dy[d]; if(nx 0 nx m ny 0 ny n !vis[nx][ny] forest[nx][ny] ! 0) { if(nx tx ny ty) return step; vis[nx][ny] true; q.push({nx, ny}); } } } } return -1; // 无法到达 } int cutOffTree(vectorvectorint forest) { m forest.size(); n forest[0].size(); vectortupleint, int, int trees; // 1. 收集所有树 (高度,x,y) for(int i 0; i m; i) { for(int j 0; j n; j) { if(forest[i][j] 1) { trees.emplace_back(forest[i][j], i, j); } } } // 2. 按树高度升序排序 sort(trees.begin(), trees.end()); int cur_x 0, cur_y 0; int total_step 0; // 3. 依次砍每一棵树 for(auto t : trees) { int h get0(t); int tx get1(t); int ty get2(t); int dist bfs(forest, cur_x, cur_y, tx, ty); if(dist -1) return -1; total_step dist; cur_x tx; cur_y ty; } return total_step; } };

相关新闻

AI编程助手会话持久化:从数据序列化到状态恢复的工程实践

AI编程助手会话持久化:从数据序列化到状态恢复的工程实践

1. 会话持久化的核心价值与挑战在AI编程助手的使用中,最令人沮丧的体验莫过于:你花了一个小时与Claude Code讨论一个复杂的重构方案,中途因为网络波动、浏览器崩溃或者需要换个设备继续工作,导致整个对话历史丢失。一切又得从头开…

2026/8/24 5:42:55 阅读更多 →
Python招聘数据分析系统:架构设计与反爬策略

Python招聘数据分析系统:架构设计与反爬策略

1. 项目背景与核心价值最近在帮朋友做职业规划咨询时,发现市场上缺乏实时、结构化的行业人才需求分析报告。传统招聘网站虽然数据丰富,但缺乏深度挖掘工具。于是我用Python开发了一套招聘数据采集分析系统,专门针对国内主流招聘平台进行行业趋…

2026/8/24 5:42:55 阅读更多 →
苏州智造转型:工业互联网与数字孪生技术实战解析

苏州智造转型:工业互联网与数字孪生技术实战解析

苏州,这座被称为“最强地级市”的城市,正在经历一场深刻的产业变革。当“工业4.0”、“智能制造”这些概念在各地被反复提及,甚至有些审美疲劳时,苏州的“智造”之路却呈现出一种截然不同的务实与凶猛。它没有停留在口号和规划上&…

2026/8/24 5:42:55 阅读更多 →

最新新闻

Morpeh Provider机制揭秘:让GameObject与ECS实体无缝协作的3种方式(完整指南)

Morpeh Provider机制揭秘:让GameObject与ECS实体无缝协作的3种方式(完整指南)

Morpeh Provider机制揭秘:让GameObject与ECS实体无缝协作的3种方式(完整指南) 【免费下载链接】morpeh 🎲 ECS Framework for Unity Game Engine and .Net Platform 项目地址: https://gitcode.com/gh_mirrors/mo/morpeh M…

2026/8/25 10:09:54 阅读更多 →
从列公司到画关系图:Chokepoint Atlas图谱引擎graph.json与Mermaid完整拆解

从列公司到画关系图:Chokepoint Atlas图谱引擎graph.json与Mermaid完整拆解

从列公司到画关系图:Chokepoint Atlas图谱引擎graph.json与Mermaid完整拆解 【免费下载链接】chokepoint-atlas 项目地址: https://gitcode.com/gh_mirrors/ch/chokepoint-atlas 如果你研究过 AI 产业链股票,多半经历过这样的困境:收…

2026/8/25 10:09:54 阅读更多 →
SaaS订阅支付全链路拆解:shadcn-nextjs-boilerplate中Stripe从Checkout到Webhook同步的完整指南

SaaS订阅支付全链路拆解:shadcn-nextjs-boilerplate中Stripe从Checkout到Webhook同步的完整指南

SaaS订阅支付全链路拆解:shadcn-nextjs-boilerplate中Stripe从Checkout到Webhook同步的完整指南 【免费下载链接】shadcn-nextjs-boilerplate Shadcn UI NextJS Boilerplate ⚡️ Free Open-source ChatGPT UI Admin Dashboard Template - Horizon AI Boilerplate …

2026/8/25 10:09:54 阅读更多 →
工业PDA H5扫码实战:WebView Bridge打通原生与Web通信

工业PDA H5扫码实战:WebView Bridge打通原生与Web通信

1. 项目概述:当工业级PDA遇上H5最近在做一个挺有意思的项目,客户那边有一批IData T1工业级PDA,他们希望能在设备自带的浏览器里,通过一个H5页面直接调用扫码功能,把扫到的条码或二维码数据回填到网页表单里。这个需求听…

2026/8/25 10:09:54 阅读更多 →
工业级PDA H5扫码方案:JSBridge打通Web与原生硬件

工业级PDA H5扫码方案:JSBridge打通Web与原生硬件

1. 项目概述:当工业级扫码终端遇上H5最近在做一个挺有意思的项目,客户那边有一批IData T1工业级PDA,他们希望能在设备自带的浏览器里,直接运行一个H5页面来完成扫码作业。听起来简单,不就是调用摄像头扫个码嘛&#xf…

2026/8/25 10:09:54 阅读更多 →
strfry数据库设计原理:PackedEvent零拷贝编码+LMDB复合索引如何榨干查询性能

strfry数据库设计原理:PackedEvent零拷贝编码+LMDB复合索引如何榨干查询性能

strfry数据库设计原理:PackedEvent零拷贝编码LMDB复合索引如何榨干查询性能 【免费下载链接】strfry a nostr relay 项目地址: https://gitcode.com/gh_mirrors/st/strfry strfry 是一个用 C 编写的高性能 nostr relay(中继服务器)&am…

2026/8/25 10:08:51 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →