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

asp个人网站怎么建设手机网站 微信链接

asp个人网站怎么建设,手机网站 微信链接,人工智能网站建设,深圳网络做网站文章目录 摘要描述题解答案题解代码分析Swift 代码如下: 示例测试及结果时间复杂度空间复杂度总结可运行 Demo 模块(Xcode Playground)参考场景与拓展 摘要 在日常开发中,我们经常遇到图遍历、路径规划的问题,特别是涉…

在这里插入图片描述
在这里插入图片描述

文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
      • Swift 代码如下:
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结
    • 可运行 Demo 模块(Xcode Playground)
    • 参考场景与拓展

摘要

在日常开发中,我们经常遇到图遍历、路径规划的问题,特别是涉及二维网格的场景。LeetCode 第 286 题《墙与门》就非常贴近现实,比如模拟房间内路径计算、楼层距离评估等。本文将通过 Swift 语言,用广度优先搜索(BFS)方式一步步拆解这个问题,并给出一套完整的可运行 Demo 和测试用例,帮你在刷题和实际项目中都能用得上。

描述

题目大致是这样的:

你有一个二维网格,表示一栋建筑的布局。每个格子可以是三种之一:

  • 墙(-1):表示这个格子不能通行;
  • 门(0):表示你从这出发是免费的;
  • 空房间(INF):表示你需要计算从最近的门到这里的最短距离。

你要做的就是把所有空房间都填上到最近门的距离。如果一个空房间无法到达任何门,保持 INF 不变。

特别注意:
这个问题要求在原数组上原地修改。

题解答案

我们最直观的思路是,对于每一个空房间,去找离它最近的门。但这样做效率非常低,因为每个空房间都要遍历一次地图。

更优的解法是:从所有门开始做 BFS,因为 BFS 本质上就是按层级扩散的,最先访问到某个点的路径就是最短路径。

题解代码分析

Swift 代码如下:

import Foundationlet INF = Int(Int32.max)func wallsAndGates(_ rooms: inout [[Int]]) {let m = rooms.countlet n = rooms[0].countvar queue: [(Int, Int)] = []// 找出所有的门(0),作为 BFS 的起点for i in 0..<m {for j in 0..<n {if rooms[i][j] == 0 {queue.append((i, j))}}}let directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]while !queue.isEmpty {let (row, col) = queue.removeFirst()for dir in directions {let newRow = row + dir.0let newCol = col + dir.1// 如果是有效的空房间,则更新并加入队列if newRow >= 0, newRow < m, newCol >= 0, newCol < n, rooms[newRow][newCol] == INF {rooms[newRow][newCol] = rooms[row][col] + 1queue.append((newRow, newCol))}}}
}

示例测试及结果

我们构造一个简单的输入样例来看下效果:

var rooms = [[INF,  -1,    0,  INF],[INF, INF,  INF,  -1],[INF,  -1,  INF,  -1],[0,    -1,  INF, INF]
]wallsAndGates(&rooms)for row in rooms {print(row)
}

输出结果:

[3, -1, 0, 1]
[2, 2, 1, -1]
[1, -1, 2, -1]
[0, -1, 3, 4]

可以看到,每个空房间都被填上了到最近门的距离,而且墙和门保持不变。非常贴近现实中路径计算场景。

时间复杂度

  • O(m × n):每个格子最多只被访问一次,所以整体复杂度和地图大小成正比。

空间复杂度

  • O(m × n):最坏情况下,队列中会放入所有空房间。

总结

这个题虽然看起来简单,但其实考察了你对 BFS 的理解。你需要反过来思考 —— 不是从目标找路径,而是从“源头”出发,让最短路径自己扩散。

这和现实生活中很多问题非常像,比如:

  • 最短配送路径(从仓库到客户)
  • 电梯调度系统(从最近楼层开始响应)
  • 消防路径规划(从灭火点扩散)

可运行 Demo 模块(Xcode Playground)

你可以将以下代码粘贴到 Xcode 的 Playground 中运行:

import Foundationlet INF = Int(Int32.max)func wallsAndGates(_ rooms: inout [[Int]]) {let m = rooms.countlet n = rooms[0].countvar queue: [(Int, Int)] = []for i in 0..<m {for j in 0..<n {if rooms[i][j] == 0 {queue.append((i, j))}}}let directions = [(0,1), (1,0), (0,-1), (-1,0)]while !queue.isEmpty {let (row, col) = queue.removeFirst()for dir in directions {let newRow = row + dir.0let newCol = col + dir.1if newRow >= 0, newRow < m, newCol >= 0, newCol < n, rooms[newRow][newCol] == INF {rooms[newRow][newCol] = rooms[row][col] + 1queue.append((newRow, newCol))}}}
}// 测试
var rooms = [[INF,  -1,  0,  INF],[INF, INF, INF, -1],[INF,  -1, INF, -1],[0,    -1, INF, INF]
]wallsAndGates(&rooms)for row in rooms {print(row)
}

参考场景与拓展

这种解法在很多游戏开发、智能交通系统、路径推荐算法中都能派上用场。例如:

  • 游戏角色自动寻路系统(从多个终点扩散路径)
  • 城市中电动车租赁系统推荐最近的还车点
  • 超市货架路径优化(最近收银通道)
http://www.dtcms.com/wzjs/547110.html

相关文章:

  • 网站需要去工信部做备案吗wordpress站点全屏
  • 佛山网站建设解决方案营销型网站建设风格设定
  • 山东网站建设公司哪家权威app设计论文
  • 一家专门做原型的网站山海关网站制作
  • 厦门哪些企业做视频网站的wordpress 在线演示
  • 刷网站建设网站开发宣传图片
  • 自己建设网站需要审核吗wordpress忘记了密码
  • 有没有专门做印刷图的网站义乌做网站的公司哪家好
  • 杭州网站公司免费一键生成转账截图
  • 怎样做一个网站企业网站的新闻资讯版块有哪些
  • wordpress做图片站的可能性做微商去哪个网站推广
  • 网站主体关闭 无法备案在哪个网站做注册资本变更
  • 网站通栏广告素材wordpress手机发表文章
  • 地税网站如何做税种确认网站1996年推广
  • 台州做网站哪家好常州企业建站系统模板
  • 代码怎么做网站广东省石油化工建设集团公司网站
  • 个人如何建立网站江苏同邦建设有限公司网站
  • 制作医院网站重庆建设工程信息网入渝备案查询
  • 无锡网站制作排名广告优化师
  • 代理登陆网站qq网页注册入口
  • 360网站地图怎么做杭州网站设计公司哪家好
  • 禅城区企业网站建设微网站怎样做
  • 做网站哪些软件.xyz做网站怎么样
  • 京东网站网站建设是什么营销型的物流网站
  • 网站里面的链接怎么做的商务网站设计与建设实训
  • 买网站平台名字吗网站开发 名片
  • 安庆 网站建设有赞分销员的功能和规则
  • 公司移动网站建设府网站建设先进个人
  • 杭州做网站的公司哪家好网站社区建设
  • 做led开关电源上什么网站好梧州网站建设公司