当前位置: 首页 > news >正文

DeepSeek LeetCode 2617. 网格图中最少访问的格子数 TypeScript实现

以下是 LeetCode 2617「网格图中最少访问的格子数」的 TypeScript 实现,采用 BFS + 并查集(路径压缩) 优化,保证每个格子只被访问一次,时间复杂度 O(mn·α(mn)),空间复杂度 O(mn)。

```typescript
function minimumVisitedCells(grid: number[][]): number {
const m = grid.length, n = grid[0].length;
if (m === 1 && n === 1) return 1;

// 距离数组,-1 表示未访问
const dist: number[][] = Array.from({ length: m }, () => new Array(n).fill(-1));
dist[0][0] = 1;

// 行并查集:rowParent[i][j] 表示在第 i 行中,列 j 及之后下一个未访问的列
const rowParent: number[][] = Array.from({ length: m }, () => new Array(n + 1).fill(0));
// 列并查集:colParent[j][i] 表示在第 j 列中,行 i 及之后下一个未访问的行
const colParent: number[][] = Array.from({ length: n }, () => new Array(m + 1).fill(0));

// 初始化并查集,每个位置指向自身
for (let i = 0; i < m; i++) {
for (let j = 0; j <= n; j++) rowParent[i][j] = j;
}
for (let j = 0; j < n; j++) {
for (let i = 0; i <= m; i++) colParent[j][i] = i;
}

// 查找 + 路径压缩
const findRow = (i: number, j: number): number => {
if (rowParent[i][j] !== j) {
rowParent[i][j] = findRow(i, rowParent[i][j]);
}
return rowParent[i][j];
};
const findCol = (j: number, i: number): number => {
if (colParent[j][i] !== i) {
colParent[j][i] = findCol(j, colParent[j][i]);
}
return colParent[j][i];
};

// 标记某格子已被访问(从并查集中移除)
const unionRow = (i: number, j: number) => {
rowParent[i][j] = findRow(i, j + 1);
};
const unionCol = (j: number, i: number) => {
colParent[j][i] = findCol(j, i + 1);
};

// 起点标记为已使用
unionRow(0, 0);
unionCol(0, 0);

const queue: [number, number][] = [[0, 0]];

while (queue.length) {
const [i, j] = queue.shift()!;
const step = dist[i][j];
const maxRight = Math.min(n - 1, j + grid[i][j]);
const maxDown = Math.min(m - 1, i + grid[i][j]);

// 向右移动(同一行)
let col = findRow(i, j + 1);
while (col <= maxRight) {
dist[i][col] = step + 1;
if (i === m - 1 && col === n - 1) return dist[i][col];
queue.push([i, col]);
unionRow(i, col);
unionCol(col, i);
col = findRow(i, col + 1);
}

// 向下移动(同一列)
let row = findCol(j, i + 1);
while (row <= maxDown) {
dist[row][j] = step + 1;
if (row === m - 1 && j === n - 1) return dist[row][j];
queue.push([row, j]);
unionRow(row, j);
unionCol(j, row);
row = findCol(j, row + 1);
}
}

return dist[m - 1][n - 1];
}
```

核心思路

· BFS 层次遍历:每次移动代价为 1,首次到达 (m-1, n-1) 时即为最少步数。
· 并查集跳过已访问格子:
· 对每一行维护一个并查集 rowParent,指向下一个未访问的列。
· 对每一列维护一个并查集 colParent,指向下一个未访问的行。
· 查找操作 findRow / findCol 配合路径压缩,能快速跳过已被访问的格子。
· 双向标记:当一个格子 (r, c) 被访问后,同时从行并查集和列并查集中移除,确保不会被重复处理。

复杂度分析

· 时间复杂度:O(mn·α(mn)),其中 α 为阿克曼反函数,近似常数。每个格子最多被访问一次,并查集操作几乎为常数。
· 空间复杂度:O(mn),用于存储距离数组、两个并查集以及 BFS 队列。

http://www.rkmt.cn/news/1372872.html

相关文章:

  • 使用Python快速接入Taotoken并实现第一个聊天机器人
  • 一文讲透|降AIGC平台测评:2026 最新好用工具推荐与对比
  • 4.2 文件误删除的恢复:PE + EasyRecovery / DiskGenius 实战流程
  • 设计模式实战解读(二):工厂模式——对象创建的解耦艺术
  • 加密流量分析:从TLS握手明文到行为建模的实战指南
  • DeepSeek-R1在火山引擎部署的7大避坑指南:从环境配置到GPU显存优化,一线工程师亲授
  • 哪家工程信息平台专业?2026年5月推荐TOP5评测数据覆盖广防漏单特点选择指南 - 品牌推荐
  • 国防军工涉密网络全光网设备定制化推荐:电话光端机/管理型光纤收发器/综合多业务光端机/视频光端机/视频综合业务光端机/选择指南 - 优质品牌商家
  • DeepSeek LeetCode 2608. 图中的最短环 C语言实现
  • Qwen模型 LeetCode 2608. 图中的最短环 Java实现
  • 井下巷道无感精准定位 作业人员在岗离岗智能甄别
  • 【ChatGPT小红书爆款文案公式】:20年AI内容专家亲授3步生成高互动率文案(附17个真实转化数据)
  • 北京游学机构哪家好?求推荐孩子独立研学北京,安全有保障的机构 - 品牌2025
  • 深度学习篇---NVIDIA TensorRT
  • 深度学习篇---张量
  • 【仅剩72小时生效】DeepSeek最新v3.2.1热补丁:强制启用动态批处理+量化缓存,立省GPU开销29%
  • 哪个工程信息平台专业?2026年5月推荐TOP5评测数据准确防错失特点选择指南 - 品牌推荐
  • 毕业论文难写?2026年AI论文写作软件排行榜权威发布,轻松达标不是梦!
  • 考虑分时电价和电动汽车灵活性的微电网两阶段鲁棒经济优化调度研究(Matlab代码实现)
  • 多功能计算器 · 使用说明
  • Windows和Office一键激活终极指南:KMS_VL_ALL_AIO智能脚本完全解析
  • 如何在3分钟内精准定位Windows热键冲突:Hotkey Detective终极指南
  • 2025-2026年上海吉日搬场有限公司电话查询:搬家前应核实资质与合同条款 - 品牌推荐
  • 2026权威软件测试机构推荐榜:北京软件验收测试、北京北京软件测评、北京机构课题软件检测报告、北京第三方软件测试选择指南 - 优质品牌商家
  • ChatGPT+B站策划=降维打击?不,92%创作者正在错误使用——来自217个失败案例的反模式图谱(含3个致命Prompt陷阱)
  • 揭秘顶级AI画师不愿透露的ChatGPT绘画提示词生成底层逻辑:基于LLM注意力机制的Prompt语法树建模
  • 2026华北电信行业信息安全方案推荐:北京远程数据恢复、北京取证数据恢复、北京数据恢复公司、北京数据销毁服务、北京服务器数据恢复选择指南 - 优质品牌商家
  • 苹果bois 很封闭吗 摘录
  • 2025-2026年国内充电桩加盟品牌推荐:十大排行厂家评测技术实力价格场景痛点 - 品牌推荐
  • Burp Suite扫描深度配置:插入点、会话控制与被动分析实战